New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

react-tetris2

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

react-tetris2

Classic Tetris game as a reusable React 18+ component, fully typed with TypeScript and controllable via ref.

latest
Source
npmnpm
Version
0.1.3
Version published
Maintainers
1
Created
Source

react‑tetris2

npm version bundle size MIT License

react‑tetris2 – Plug-and-play <Tetris2/> component for React 18+, built with TypeScript.

🎮 Live Demo – Try Tetris2 here ⬅️

✨ Features

  • Fully typed API – Strictly typed props and methods with TypeScript 5.
  • Modular architecture – Use as a component with optional ref control.
  • Keyboard controls – Playable entirely via keyboard input.
  • Imperative API – Call start(), restart() via ref for external control.

🚀 Installation

# npm
npm i react-tetris2
# pnpm
pnpm add react-tetris2

Note: react and react-dom are required as peer dependencies.
Make sure your project includes them (React 18+ supported).

🤖 Quick start

Use the component right after installation — no additional setup required.

Example: main.tsx (Vite)

💡 Make sure to comment out global CSS imports (e.g., index.css) to avoid style conflicts.

// src/main.tsx
import { StrictMode } from 'react';
import { createRoot } from 'react-dom/client';
import Tetris2 from 'react-tetris2';
// import './index.css'; // optional: comment this out to avoid conflicts

createRoot(document.getElementById('root')!).render(
  <StrictMode>
    <Tetris2 />
  </StrictMode>
);

🔧 Customized usage

For advanced control and customization, use a ref and props:

// src/main.tsx
import React, { StrictMode, useRef } from 'react';
import { createRoot } from 'react-dom/client';
import Tetris2, { Tetris2Handle } from 'react-tetris2';

function App() {
  const game = useRef<Tetris2Handle>(null);

  return (
    <>
      <Tetris2
        ref={game}
        credits={3}
        manageCredits={true}
        showModals={true}
        soundEnabled={true}
        showControlsLegend={true}
        onGameOver={() => alert('Game Over!')}
        onScoreChange={(score) => console.log('Score:', score)}
        onLevelChange={(level) => console.log('Level:', level)}
      />
      <div style={{ marginTop: '1rem' }}>
        <button onClick={() => game.current?.start()}>Start</button>
        <button onClick={() => game.current?.restart()}>Restart</button>
      </div>
    </>
  );
}

createRoot(document.getElementById('root')!).render(
  <StrictMode>
    <App />
  </StrictMode>
);

📝 API

Props

PropTypeDefaultDescription
creditsnumberNumber of available game credits
manageCreditsbooleanfalseEnable credit-based game start
showModalsbooleantrueShow start/pause/game over modals
soundEnabledbooleantrueEnable background music
showControlsLegendbooleantrueShow control instructions below board
onGameOver() => voidCallback when the player loses
onScoreChange(score: number) => voidCallback when score updates
onLevelChange(level: number) => voidCallback when level updates

Imperative API

MethodDescription
start()Start or resume the game
restart()Restart the game

Consult index.d.ts for the full API surface.

🎵 Audio

This component includes background music: a string-quartet arrangement of
“Korobeiniki (Tetris Theme)” by Gregor Quendel, licensed under the Pixabay License.

🧪 Contributing

We welcome contributions! Follow the steps below to get started:

  • Clone the repository and install dependencies

    git clone https://github.com/Ingenarte/react-tetris2.git
    cd react-tetris2
    npm install
    
  • Start the local playground

    This will launch a development environment with hot reload:

    npm dev
    
  • Run the full test suite (unit + E2E)

    Make sure your changes don't break anything:

    npm test       # or: npm fulltest
    
  • Create a feature branch

    Avoid working directly on master:

    git checkout -b your-feature-name
    
  • Commit and push your changes

    Follow Conventional Commits if possible:

    git commit -m "feat: add new animation for line clear"
    git push origin your-feature-name
    
  • Open a Pull Request

    Submit your PR against the master branch at:
    https://github.com/Ingenarte/react-tetris2/pulls

💡 Tip: You can also run Storybook locally with:

npm run storybook

🛠️ Internal tools like lint, typecheck, and build are available via npm scripts.
Always run npm fulltest before pushing.

🛣️ Roadmap (posible)

  • Enhanced accessibility (ARIA roles, focus trapping, high-contrast mode)
  • Multiplayer LAN
  • AI opponent
  • Replay export / import

📜 License

MIT – see LICENSE for details.
Original work © 2015 Matthew Brandly.
Additions & refactor © 2025 INGENARTE.
Audio © 2024 Gregor Quendel.

TETRIS® is a registered trademark of Tetris Holding LLC. This project is not affiliated with or endorsed by Tetris Holding LLC, Nintendo, or The Tetris Company.

Keywords

react

FAQs

Package last updated on 23 May 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts