Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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: 2 days 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 (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2025-01-24T18:53:09.000Z (9 days ago)
- Last Synced: 2025-01-30T19:42:08.217Z (2 days ago)
- Topics: angular, firebase, nextjs, nuxt, nuxt3, ssr
- Language: JavaScript
- Homepage: https://www.npmjs.com/package/firebase-frameworks
- Size: 6.45 MB
- Stars: 295
- Watchers: 12
- Forks: 81
- Open Issues: 74
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Codeowners: CODEOWNERS
Awesome Lists containing this project
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 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;
}
```### 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 |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
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.