https://github.com/FirebaseExtended/firebase-framework-tools
  
  
    Experimental addon to the Firebase CLI to add web framework support 
    https://github.com/FirebaseExtended/firebase-framework-tools
  
angular firebase nextjs nuxt nuxt3 ssr
        Last synced: 8 months ago 
        JSON representation
    
Experimental addon to the Firebase CLI to add web framework support
- Host: GitHub
 - URL: https://github.com/FirebaseExtended/firebase-framework-tools
 - Owner: FirebaseExtended
 - License: apache-2.0
 - Created: 2022-03-14T17:21:31.000Z (over 3 years ago)
 - Default Branch: main
 - Last Pushed: 2025-03-21T15:21:37.000Z (8 months ago)
 - Last Synced: 2025-03-21T17:06:06.812Z (8 months ago)
 - Topics: angular, firebase, nextjs, nuxt, nuxt3, ssr
 - Language: JavaScript
 - Homepage: https://www.npmjs.com/package/firebase-frameworks
 - Size: 7.93 MB
 - Stars: 305
 - Watchers: 12
 - Forks: 103
 - Open Issues: 79
 - 
            Metadata Files:
            
- Readme: README.md
 - Contributing: CONTRIBUTING.md
 - License: LICENSE
 - Codeowners: CODEOWNERS
 
 
Awesome Lists containing this project
- awesome-angular - firebase-framework-tools - Experimental addon to the [Firebase CLI](https://github.com/firebase/firebase-tools/) to add web framework support. (Angular / CLI Tools)
 - fucking-awesome-angular - firebase-framework-tools - Experimental addon to the <b><code>     ?⭐</code></b> <b><code>     ?🍴</code></b> [Firebase CLI](https://github.com/firebase/firebase-tools/)) to add web framework support. (Angular / CLI Tools)
 
README
          # App Hosting adapters
## Overview
App Hosting provides configuration-free build and deploy support for Web apps developed in these frameworks:
* Next.js 13+
* Angular 17.2+
This repo holds the code for the adapters that enable support for these frameworks. At a high level these adapters transform framework specific configurations into an [output bundle spec](#app-hosting-output-bundle) that App Hosting can use to configure frameworks support. For more information see [Framework integration](https://firebase.google.com/docs/app-hosting/about-app-hosting#frameworks).
## App Hosting output bundle
The App Hosting output bundle is a file based specification that allows different frameworks to configure and customize their App Hosting deployment for enhanced support.
Any framework that can generate a build output in accordance with the App Hosting output bundle can be deployed on App Hosting.
The output bundle primarily consists of a `bundle.yaml` file that sits inside of the `.apphosting` directory. This bundle.yaml contains all the ways that frameworks can configure App Hosting when users deploy their applications.
> [!NOTE]  
> App Hosting technically supports all node applications, but no custom framework features will be enabled without the output bundle.
## Output bundle Schema
The output bundle is contained in a single file:
```shell
.apphosting/bundle.yaml
```
As long as this file exists and follows the schema, App Hosting will be able to process the build properly.
The schema can also be found in [source](https://github.com/FirebaseExtended/firebase-framework-tools/blob/main/packages/%40apphosting/common/src/index.ts#L4)
```typescript
interface OutputBundle {
  version: "v1"
  runConfig: RunConfig;
  metadata: Metadata;
  outputFiles?: OutputFiles;
}
```
### Version
The `version` represents which output bundle version is currently being used. The current version is v1.
### RunConfig
The `runConfig` fields configures the Cloud Run service associated with the App Hosting Backend.
```typescript
interface RunConfig {
  runCommand: string;
  environmentVariables?: EnvVarConfig[];
  concurrency?: number;
  cpu?: number;
  memoryMiB?: number;
  minInstances?: number;
  maxInstances?: number;
}
```
| Field  | Type | Description | Required? |
| ---------- | ------- | - | - |
| `runCommand` | `string` |Command to start the server (e.g. `node dist/index.js`). Assume this command is run from the root dir of the workspace. This should be the productionized version of the server start command. | y |
| `environmentVariables`| `EnvVarConfig[]` | Environment variables present in the server execution environment.| n |
| `concurrency` | `number` | The maximum number of concurrent requests that each server instance can receive.| n |
| `cpu` | `number` |The number of CPUs used in a single server instance. | n |
| `memoryMiB` | `number` | The amount of memory available for a server instance.| n |
| `minInstance` | `number` |The limit on the minimum number of function instances that may coexist at a given time. | n |
| `MaxInstance` | `number` | The limit on the maximum number of function instances that may coexist at a given time.| n |
Many of these fields are shared with `apphosting.yaml`. See the [runConfig reference documentation](https://firebase.google.com/docs/reference/apphosting/rest/v1beta/projects.locations.backends.builds#runconfig) for additional context and default values.
### EnvVarConfig
```typescript
interface EnvVarConfig {
  variable: string;
  value: string;
  availability: 'RUNTIME'
}
```
| Field  | Type | Description | Required? |
| ---------- | ------- | - | - |
| `variable` | `string` |Name of the environment variable | y |
| `value` | `string` |Value associated with the environment variable | y |
| `availability` | `RUNTIME` | Where the variable will be available. For now this will always be `RUNTIME` | y |
### Metadata
```typescript
interface Metadata {
  adapterPackageName: string;
  adapterVersion: string;
  framework: string;
  frameworkVersion?: string;
}
```
| Field  | Type | Description | Required? |
| ---------- | ------- | - | - |
| `adapterPackageName` | `string` |Name of the adapter (this should be the npm package name) | y |
| `adapterVersion`| `string` | Version of the adapter | y |
| `framework` | `string` | Name of the framework that is being supported | y |
| `frameworkVersion` | `string` |Version of the framework that is being supported | n |
### OutputFiles
OutputFiles is an optional field to configure outputFiles and optimize server files + static assets.
```typescript
interface OutputFiles {
  serverApp: ServerApp
}
```
| Field  | Type | Description | Required? |
| ---------- | ------- | - | - |
| `serverApp` | `ServerApp` | ServerApp holds configurations related to the serving files at runtime from Cloud Run | y |
### ServerApp
OutputFiles is an optional field to configure outputFiles and optimize server files + static assets.
```typescript
interface ServerApp {
  include:  string[]
}
```
| Field  | Type | Description | Required? |
| ---------- | ------- | - | - |
| `include` | `string[]` | include holds a list of directories + files relative to the app root dir that frameworks need to deploy to the App Hosting server, generally this will be the output/dist directory (e.g. .output or dist). In the case that the framework wants to include all files they can use [“.”] | y |
## Sample
Here is a sample `.apphosting/bundle.yaml` file putting all this together:
```yaml
version: v1
runConfig:
  runCommand: node dist/index.js
  environmentVariables:
    - variable: VAR
      value: 8080
      availability: RUNTIME
  concurrency: 80
  cpu: 2
  memoryMiB: 512
  minInstances: 0
  maxInstances: 14
outputFiles:
  serverApp:
    include: 
      - dist
      - .output
    
metadata:
  adapterPackageName: npm-name
  adapterVersion: 12.0.0
  framework: framework-name
  frameworkVersion: 1.0.0
```
As long as you have the `bundle.yaml` in this format, App Hosting will be able to deploy any framework that supports server side rendering.