Big Tower Tiny Square — Github Best
Let’s say you pick emilyxxie’s clone. Here’s how to get the best local experience:
Best for: Framework enthusiasts (Phaser 3) and mobile touch optimization.
Phaser is a popular 2D game framework, and this implementation shines on both desktop and phone. The repository includes a level editor built with React – drag and drop hazards, save to JSON, and share with friends. The “tiny square” here has slightly faster movement, appealing to speedrunners.
Why it’s among the best:
Link: github.com/losttheory/tiny-tower-phaser big tower tiny square github best
To label a project the "best" on GitHub is a subjective claim, but in the case of Big Tower Tiny Square, it is justified by its utility. It is a rare example of a project that is fun to play and educational to read. It proves that a game does not need high-fidelity textures or complex narratives to be successful; it needs a solid core loop and clean code.
index.html
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>Big Tower Tiny Square</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<canvas id="game"></canvas>
<script type="module" src="src/main.js"></script>
</body>
</html>
style.css
html,bodyheight:100%;margin:0;background:#111;display:flex;align-items:center;justify-content:center
canvasbackground:#20232a;border:4px solid #333;max-width:100%;height:auto
src/main.js
import Game from './game.js';
const canvas = document.getElementById('game');
const game = new Game(canvas);
game.start();
window.addEventListener('resize', ()=>game.resize());
src/game.js
import Player, Tower from './entities.js';
export class Game {
constructor(canvas){
this.canvas = canvas;
this.ctx = canvas.getContext('2d');
this.resize();
this.player = new Player(60, this.h - 60);
// Big tower positioned center-left
const towerW = 160, towerH = this.h * 0.8;
this.tower = new Tower(this.w/2 - 80, this.h - towerH, towerW, towerH);
this.keys = {};
window.addEventListener('keydown', e=>this.keys[e.key]=true);
window.addEventListener('keyup', e=>this.keys[e.key]=false);
}
resize() 1;
this.w = Math.min(window.innerWidth, 900);
this.h = Math.min(window.innerHeight, 700);
this.canvas.width = this.w * DPR;
this.canvas.height = this.h * DPR;
this.canvas.style.width = this.w + 'px';
this.canvas.style.height = this.h + 'px';
this.ctx.setTransform(DPR,0,0,DPR,0,0);
start() this.last = performance.now(); requestAnimationFrame(t=>this.loop(t));
loop(t)
const dt = Math.min(0.05,(t - this.last)/1000); this.last = t;
this.update(dt); this.render();
requestAnimationFrame(tt=>this.loop(tt));
update(dt)
// simple input
const speed = 200;
this.player.vx = 0; this.player.vy = 0;
if(this.keys['ArrowLeft']
render()
const ctx = this.ctx;
ctx.clearRect(0,0,this.w,this.h);
// draw tower
ctx.fillStyle = '#4b5563';
ctx.fillRect(this.tower.x, this.tower.y, this.tower.w, this.tower.h);
// tower details (windows)
ctx.fillStyle = '#111827';
for(let y=this.tower.y+20;y<this.tower.y+this.tower.h-20;y+=30)
for(let x=this.tower.x+20;x<this.tower.x+this.tower.w-20;x+=30)
ctx.fillRect(x,y,12,12);
// draw player (tiny square)
ctx.fillStyle = '#ffcc00';
ctx.fillRect(this.player.x, this.player.y, this.player.size, this.player.size);
}
src/entities.js
export class Player
constructor(x,y)
this.x = x; this.y = y; this.size = 10;
this.vx = 0; this.vy = 0;
update(dt)
this.x += this.vx * dt; this.y += this.vy * dt;
// bounds clamp
this.x = Math.max(0, Math.min(this.x, 900 - this.size));
this.y = Math.max(0, Math.min(this.y, 700 - this.size));
export class Tower
constructor(x,y,w,h) this.x=x; this.y=y; this.w=w; this.h=h;
Why it is the best: This configuration is the gold standard. It utilizes the workbench.colorCustomizations to hide the activity bar, status bar, and title bar completely.
Key features:
GitHub snippet from the repo:
"window.titleBarStyle": "custom",
"workbench.activityBar.visible": false,
"workbench.statusBar.visible": false,
"editor.minimap.enabled": false,
"editor.renderLineHighlight": "all"
Here is your curated list of winners. If you only have time to look at three, start here.
| Repository | Platform | Best For |
| :--- | :--- | :--- |
| zen-mode.nvim | Neovim | The purest "Tiny Square" experience. |
| vscode-zen-mode-plus | VS Code | Adds blurred background to monaco editor. |
| tiny-square-theme | All (Sublime/VSCode/Vim) | A strictly monochrome theme using only #FFFFFF, #888888, and #000000. |
| yabai-tiny-square | macOS | A window manager config that forces every app to become a floating square. |
| awesomewm-bigtower | Linux (AwesomeWM) | The most complex "Big Tower" rice; uses Lua to create a dynamic grid where only the active window is visible. |

Caution white G1 owners: Cupcake kills DarkKeys, so the physical keyboard is once again almost impossible to see in moderate lighting conditions. 🙁
How can I receive the cupcake update sooner? I haven't gotten it still and have had the phone since the day after after its release. And I've been waiting on it since like decemberrrr.
Thanks
-derek
Hi Derek,
I wouldn't recommend you download the devphone firmware since it warns that it may miss some features for "proper" localised phones. The page I used is here: http://www.htc.com/www/support/android/adp.html , but I repeat, you should probably not do this. I think the upgrade is starting to be distributed by most operators about now.
CT.