Flick pineapples at jealous penguins. Defend your fruit stand. Nobody gets hurt.
▶ Play it now · free · one small file · works offline · no ads · no tracking
A silly, glossy toy-box game for kids of all ages. The penguins are jealous of your tropical fruit and march down the ice toward your stand. You flick a pineapple from the bottom of the screen: the direction of the flick picks the target area, its speed sets the power, and a gentle snap pulls the shot toward the nearest penguin. Bonk them, chain combos, collect trophies, and beat a different Champion at the end of every stage. It works on phones, tablets and computers, in any modern browser.
It is one self-contained HTML file with no runtime dependencies and no network calls. The glossy toy look is drawn on a 2D canvas from sprites scaled by depth, progress is saved in your browser, and players get a smaller self-unpacking copy of the same page.
Status: alpha (see the changelog for the current version). All five stages, five Champions, the Pineapple Roll bonus game and a shop are playable. The art is still being polished.
LFC Foundry is a home for free, open source games and apps that each live in a single file. Pineapple Defense is the flicking game in that set: made for kids first, with silly fun and no cruelty, so there are no ads, purchases, accounts, streaks, timers, prize boxes or leaderboards, and losing is gentle. It is also a working test of the shared JS-modules pieces in a real game.
A short picture tour shows the first time you open the game (you can skip it, and replay it from How to play).
- Flick up from the bottom of the screen toward a penguin (on a mouse or touchpad, swipe up over the game). A harder flick throws farther.
- Penguins that reach your fruit stand make it wobble and lower the Cheer meter (the tall bar on the right). Clear waves to cheer it back up.
- Each stage has five waves, shown by the bar across the top, then a Champion. Every Champion fights differently, and a hint tells you how to win.
- Every penguin you bonk pays Golden Pineapples (Rockhopper 1, Adélie 3, Gentoo 6, Champion 12). Spend them in the Shop on the title screen.
Handy things to know
- Pick Classic (quick, free) or Lobber (slower, splashes nearby penguins, 2 Golden Pineapples a throw) at the bottom left. Mega pineapples splash the most and cost 3.
- Watch for fish on parachutes. A penguin that eats one levels up and gets faster and tougher, and a Gentoo that eats another becomes a mecha penguin with armor that takes 3 hits.
- Penguins wear all kinds of things: warm hats, scarves, mittens, and hot chocolate. Spotting one in a full outfit is a treat.
- Combos: every hit within a second and a half chains, whether it comes from your slingshot, a helper or one big splash.
- Tap the pickups that appear on your table, and the little surprises hiding in the scenery (a talking cloud, a duck, a whale, balloons you can pop). Each stage also hides one secret tap spot on each side.
- After stage 4 you can play Pineapple Roll, a carnival bonus game: flick a ball up the lane into the holes. The harder holes score more, and a ball that rattles around a rim can still drop in. You get two plays per run, and what you win becomes Golden Pineapples.
- Runs: clearing all five stages is a run. Each finished run makes penguins and Champions 10% faster (up to double speed) and brings a new challenge and more trophies.
- Settings (title screen): game speed (100% down to 60%), left-handed layout, aim help, the dotted aim arc, high contrast, larger text, large buttons, a calm mode that turns off bobbing, confetti and other motion, a battery saver, an FPS counter with a plain-words verdict, tap or hold to throw (for very young players), an early flick helper, a one-tap Little hands setup, four game-feel options (hit pause, screen shake, sticky aim, smoother flick speed), every finger plays, a danger glow for penguins near your stand (on by default), a For grown-ups card, keep screen on and full screen. A new game asks once whether you want to Flick or Tap. On Android the back swipe pauses the game. A second copy opened in another tab plays without saving, so two tabs never overwrite each other.
- Keys on a keyboard: P or Esc pauses, R calls the Pineapple Rain, 1 and 2 pick the pineapple.
![]() |
![]() |
![]() |
![]() |
![]() |
| 1. Sandy Snack Shore Coach Waddles |
2. Flip-Flop Flats Captain Flipper |
3. Iceberg Harbor Hullabaloo Sir Slidealot |
4. Stormy Splash Sea Madame Mohawk |
5. Glacier Party Fortress Grand Champion Bernard |
Pineapple Roll (the bonus game) · Trophies · Shop
| Pickup | |
|---|---|
| Zippy! Super fast throws for 8 seconds. |
|
| Mega! Every throw splashes for 8 seconds. |
|
| Cheer up! Fills the cheer meter. |
|
| Toasty! Sleepy, slow penguins for 6 seconds. |
Trophies pay Golden Pineapples. They show as a gold icon when you have them and as a gray one when you do not.
Everything is one self-contained HTML file built from src/. There are no runtime dependencies, no network calls and a strict content security policy.
- Design brief: docs/pineapple-defense-design.md · QA and build process: docs/qa-process.md · ideas and performance audits: docs/ideas-qol-and-performance.md · changelog
- Build:
python3 build.pymakes the single-fileindex.htmlfromsrc/(needsfonttools). Do not editindex.htmlby hand. - Packed single file:
python3 tools/pack.pymakes one smaller, self-unpacking.htmlindist/; add--minto pack the minified page (python3 build.py --minfirst, needsesbuild). - Icons:
python3 -I tools/make_icons.pyregeneratessrc/sprites/icons.svgand the standalone files indocs/icons/. - Checks:
python3 -I tools/qa.py(add--fffor Firefox). Release:python3 -I tools/release.py. - Test browsers: Firefox 158, ungoogled Chromium 155 and WebKitGTK 2.52.6 / GNOME Web 46.5, one at a time. WebKitGTK was added to the rule on 2026-10-17; release 2026.10.17.0716 is the first one tested in it. The changelog lists what each release was tested in, and says "not recorded" where that was not noted. Targets: Android Chrome, Firefox and Chromium-based desktop browsers.
- Apple Press: a clicker game for kids (play)
- Fancy Banana: a one-tap flying-banana arcade game (play)
- JS-modules: free (MIT) code pieces for single-file browser games, a few of which this game uses (demos)
Forged by LFC Foundry. Copyright © 2026 LFC Foundry, released under the MIT License (see LICENSE). Branding notice: the name "LFC Foundry" and the project identities are reserved; if you fork, significantly modify or commercially redistribute this game, change the public product name and branding. The same notice sits at the top of every built page and the credit "Forged by LFC Foundry, MIT License" shows on the title screen.
Pieces with their own notices: fonts Bricolage Grotesque and Figtree (SIL OFL 1.1, see src/fonts/). sticker-text from JS-modules (MIT, see header in src/vendor/). Packer and unpacker for the single file: lzma-pack and lzma-decode from JS-modules (MIT, see tools/vendor/).









