Skip to content

About

Automate Firebase configuration for JavaScript & TypeScript projects safely and framework-aware.

Topics

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Latest commit

Β 

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ”₯ FireConfig

Automate Firebase configuration for JavaScript & TypeScript projects.

npm version npm downloads GitHub stars GitHub issues CI Node.js License

Automate the repetitive parts of connecting your project to Firebase.

FireConfig detects your project, configures Firebase, safely manages environment variables, and generates framework-specific Firebase initialization.

React Β· Vite Β· CRA Β· Next.js Β· React Native


⚑ Quick Start

npx fireconfig init

That's it.

FireConfig guides you through:

Detect β†’ Authenticate β†’ Select β†’ Configure β†’ Generate

Example

πŸ”₯ FireConfig

βœ“ Project detected: Next.js
βœ“ Package manager: npm
βœ“ Firebase CLI detected
βœ“ Firebase authentication detected

Fetching Firebase projects...
βœ“ Firebase project selected

Checking Firebase Web Apps...
βœ“ Web App selected

Downloading Firebase configuration...
βœ“ Firebase configuration retrieved

Configuring Firebase environment...
βœ“ .env.local configured

Generating Firebase initialization...
βœ“ src/firebase/config.js created

βœ“ Firebase configuration complete!

πŸ› οΈ Commands

Command Description
fireconfig init Configure Firebase for the current project
fireconfig doctor Diagnose Firebase configuration
fireconfig --help Show available commands
fireconfig --version Show installed version

🧩 Supported Projects

Framework Detection Configuration
React βœ… βœ… (with build tooling)
React + Vite βœ… βœ…
React + Create React App βœ… βœ…
Next.js βœ… βœ…
React Native Android βœ… βœ…
Expo βœ… 🚧 Planned

React Native projects are automatically connected to Firebase through the Android Firebase configuration workflow. Expo configuration is planned for a future release.

πŸ”₯ What FireConfig Automates

  • Detects your project framework
  • Detects your package manager
  • Checks Firebase CLI
  • Verifies Firebase authentication
  • Finds or creates a Firebase project
  • Finds or creates a Firebase Web App
  • Retrieves Firebase SDK configuration
  • Installs the Firebase SDK when required
  • Safely merges .env.local
  • Generates src/firebase/config.js
  • Validates the configuration with fireconfig doctor

πŸ›‘οΈ Built With Safety in Mind

FireConfig does not blindly overwrite your project:

  • Existing environment variables are preserved
  • Comments and unrelated variables are preserved
  • Conflicting Firebase values require confirmation
  • Existing Firebase configuration files require confirmation before replacement
  • Firebase projects and Web Apps require explicit confirmation before creation
  • Re-running FireConfig does not duplicate configuration
  • Service-account private keys are never requested or stored

πŸ“¦ Installation

Run without installing

npx fireconfig init

Install globally

npm install -g fireconfigcli

Then:

fireconfig init

βš™οΈ Framework Configuration Architecture

In v0.3.0, FireConfig uses a capability-oriented web architecture:

                 Firebase project
                       β”‚
                       β–Ό
                 Firebase Web App
                       β”‚
                       β–Ό
              Firebase SDK config
                       β”‚
             β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
             β–Ό                   β–Ό
      Environment             Init module
        merger                 generator
             β”‚                   β”‚
             β–Ό                   β–Ό
        .env.local        src/firebase/config.js

Next.js

Environment (.env.local):

NEXT_PUBLIC_FIREBASE_API_KEY=...
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=...
NEXT_PUBLIC_FIREBASE_PROJECT_ID=...
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=...
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=...
NEXT_PUBLIC_FIREBASE_APP_ID=...

Initialization (src/firebase/config.js):

import { initializeApp, getApps } from "firebase/app";

const firebaseConfig = {
    apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY,
    authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN,
    projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID,
    storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET,
    messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID,
    appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID,
};

export const app =
    getApps().length > 0
        ? getApps()[0]
        : initializeApp(firebaseConfig);

React + Vite

Environment (.env.local):

VITE_FIREBASE_API_KEY=...
VITE_FIREBASE_AUTH_DOMAIN=...
VITE_FIREBASE_PROJECT_ID=...
VITE_FIREBASE_STORAGE_BUCKET=...
VITE_FIREBASE_MESSAGING_SENDER_ID=...
VITE_FIREBASE_APP_ID=...

Initialization (src/firebase/config.js):

import { initializeApp, getApps } from "firebase/app";

const firebaseConfig = {
    apiKey: import.meta.env.VITE_FIREBASE_API_KEY,
    authDomain: import.meta.env.VITE_FIREBASE_AUTH_DOMAIN,
    projectId: import.meta.env.VITE_FIREBASE_PROJECT_ID,
    storageBucket: import.meta.env.VITE_FIREBASE_STORAGE_BUCKET,
    messagingSenderId: import.meta.env.VITE_FIREBASE_MESSAGING_SENDER_ID,
    appId: import.meta.env.VITE_FIREBASE_APP_ID,
};

export const app =
    getApps().length > 0
        ? getApps()[0]
        : initializeApp(firebaseConfig);

React + Create React App / Plain React

Environment (.env.local):

REACT_APP_FIREBASE_API_KEY=...
REACT_APP_FIREBASE_AUTH_DOMAIN=...
REACT_APP_FIREBASE_PROJECT_ID=...
REACT_APP_FIREBASE_STORAGE_BUCKET=...
REACT_APP_FIREBASE_MESSAGING_SENDER_ID=...
REACT_APP_FIREBASE_APP_ID=...

Initialization (src/firebase/config.js):

import { initializeApp, getApps } from "firebase/app";

const firebaseConfig = {
    apiKey: process.env.REACT_APP_FIREBASE_API_KEY,
    authDomain: process.env.REACT_APP_FIREBASE_AUTH_DOMAIN,
    projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID,
    storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET,
    messagingSenderId: process.env.REACT_APP_FIREBASE_MESSAGING_SENDER_ID,
    appId: process.env.REACT_APP_FIREBASE_APP_ID,
};

export const app =
    getApps().length > 0
        ? getApps()[0]
        : initializeApp(firebaseConfig);

🩺 Diagnostics with fireconfig doctor

Run fireconfig doctor to inspect and diagnose your Firebase setup at any time:

fireconfig doctor

Example:

🩺 FireConfig Doctor

βœ“ Project: React + Vite project detected
βœ“ Package manager: npm detected
βœ“ Firebase CLI: Firebase CLI 15.30.2 detected
βœ“ Firebase authentication: Firebase authentication detected
βœ“ Firebase SDK: Firebase SDK 12.19.0 detected
βœ“ Firebase config: React Vite Firebase environment configuration is valid

6/6 checks passed.
πŸ”₯ Firebase setup looks good!

πŸ”’ Security Principles

  • FireConfig never requests or stores Firebase service-account private keys.
  • Authentication is delegated entirely to the official Firebase CLI (firebase login).
  • Values written to .env.local are client-side public identifiers intended for browser use.
  • Firebase Security Rules and server-side checks remain essential to protect your database, storage, and authentication resources.
  • Process execution avoids unnecessary shell: true and sanitizes command arguments.

πŸ§ͺ Development & Testing

Clone the repository:

git clone https://github.com/Ugesh-Praavin/fireconfig.git
cd fireconfig
npm install

Run the automated test suite:

npm test
  • Automated test suite & CI: 135 tests passing

πŸ—ΊοΈ Roadmap

v0.1.x

  • Project detection
  • Firebase CLI detection & installation
  • Firebase authentication
  • Firebase project & Web App discovery
  • SDK installation & initial generators

v0.2.x

  • Next.js environment configuration
  • React Native Android configuration (google-services.json)
  • Framework-specific doctor diagnostics

v0.3.0

  • Capability-oriented strategy architecture
  • Shared safe environment merger (src/config/env-merger.js)
  • Web Firebase initialization generator (src/firebase/config.js)
  • Automatic Firebase project creation with explicit consent
  • Automatic Firebase Web App creation with explicit consent
  • Context-aware confirmation UX for zero-project and user-selected creation flows
  • Conflict detection and interactive overwrite prompts
  • Framework-aware doctor validation for Vite, CRA, Next.js, React, and React Native
  • Strict idempotency across CLI runs

Future

  • Expo configuration workflow
  • Firebase iOS configuration for React Native
  • Additional Firebase service configuration (Firestore, Storage, Auth emulator setup)

πŸ“„ License

MIT License. See LICENSE for details.

πŸ‘€ Author

Ugesh Praavin D

About

Automate Firebase configuration for JavaScript & TypeScript projects safely and framework-aware.

Topics

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages