{"id":17463037,"url":"https://github.com/firebaseextended/firebase-framework-tools","last_synced_at":"2025-10-06T04:06:12.343Z","repository":{"id":37883120,"uuid":"469835179","full_name":"FirebaseExtended/firebase-framework-tools","owner":"FirebaseExtended","description":"Experimental addon to the Firebase CLI to add web framework support","archived":false,"fork":false,"pushed_at":"2025-05-07T20:57:31.000Z","size":24254,"stargazers_count":317,"open_issues_count":80,"forks_count":116,"subscribers_count":12,"default_branch":"main","last_synced_at":"2025-05-10T13:44:03.695Z","etag":null,"topics":["angular","firebase","nextjs","nuxt","nuxt3","ssr"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/firebase-frameworks","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FirebaseExtended.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-03-14T17:21:31.000Z","updated_at":"2025-05-03T23:08:55.000Z","dependencies_parsed_at":"2023-11-07T17:50:02.121Z","dependency_job_id":"5c146f2e-76ce-411d-ac3a-3f13778adcbd","html_url":"https://github.com/FirebaseExtended/firebase-framework-tools","commit_stats":{"total_commits":268,"total_committers":24,"mean_commits":"11.166666666666666","dds":"0.47388059701492535","last_synced_commit":"7020d552eb9e68362124f55a6c9a76c9ec755d8c"},"previous_names":[],"tags_count":100,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FirebaseExtended%2Ffirebase-framework-tools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FirebaseExtended%2Ffirebase-framework-tools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FirebaseExtended%2Ffirebase-framework-tools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FirebaseExtended%2Ffirebase-framework-tools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FirebaseExtended","download_url":"https://codeload.github.com/FirebaseExtended/firebase-framework-tools/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254149948,"owners_count":22022851,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["angular","firebase","nextjs","nuxt","nuxt3","ssr"],"created_at":"2024-10-18T10:07:54.022Z","updated_at":"2025-10-06T04:06:07.296Z","avatar_url":"https://github.com/FirebaseExtended.png","language":"JavaScript","readme":"# App Hosting adapters\n\n## Overview\n\nApp Hosting provides configuration-free build and deploy support for Web apps developed in these frameworks:\n\n* Next.js 13+\n* Angular 17.2+\n\nThis 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).\n\n## App Hosting output bundle\n\nThe App Hosting output bundle is a file based specification that allows different frameworks to configure and customize their App Hosting deployment for enhanced support.\n\nAny framework that can generate a build output in accordance with the App Hosting output bundle can be deployed on App Hosting.\n\nThe 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.\n\n\u003e [!NOTE]  \n\u003e App Hosting technically supports all node applications, but no custom framework features will be enabled without the output bundle.\n\n## Output bundle Schema\n\nThe output bundle is contained in a single file:\n\n```shell\n.apphosting/bundle.yaml\n```\n\nAs long as this file exists and follows the schema, App Hosting will be able to process the build properly.\n\nThe schema can also be found in [source](https://github.com/FirebaseExtended/firebase-framework-tools/blob/main/packages/%40apphosting/common/src/index.ts#L4)\n\n```typescript\ninterface OutputBundle {\n  version: \"v1\"\n  runConfig: RunConfig;\n  metadata: Metadata;\n  outputFiles?: OutputFiles;\n}\n```\n\n### Version\n\nThe `version` represents which output bundle version is currently being used. The current version is v1.\n\n### RunConfig\n\nThe `runConfig` fields configures the Cloud Run service associated with the App Hosting Backend.\n\n```typescript\ninterface RunConfig {\n  runCommand: string;\n  environmentVariables?: EnvVarConfig[];\n  concurrency?: number;\n  cpu?: number;\n  memoryMiB?: number;\n  minInstances?: number;\n  maxInstances?: number;\n}\n```\n\n| Field  | Type | Description | Required? |\n| ---------- | ------- | - | - |\n| `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 |\n| `environmentVariables`| `EnvVarConfig[]` | Environment variables present in the server execution environment.| n |\n| `concurrency` | `number` | The maximum number of concurrent requests that each server instance can receive.| n |\n| `cpu` | `number` |The number of CPUs used in a single server instance. | n |\n| `memoryMiB` | `number` | The amount of memory available for a server instance.| n |\n| `minInstance` | `number` |The limit on the minimum number of function instances that may coexist at a given time. | n |\n| `MaxInstance` | `number` | The limit on the maximum number of function instances that may coexist at a given time.| n |\n\nMany 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.\n\n### EnvVarConfig\n\n```typescript\ninterface EnvVarConfig {\n  variable: string;\n  value: string;\n  availability: 'RUNTIME'\n}\n\n```\n\n| Field  | Type | Description | Required? |\n| ---------- | ------- | - | - |\n| `variable` | `string` |Name of the environment variable | y |\n| `value` | `string` |Value associated with the environment variable | y |\n| `availability` | `RUNTIME` | Where the variable will be available. For now this will always be `RUNTIME` | y |\n\n### Metadata\n\n```typescript\ninterface Metadata {\n  adapterPackageName: string;\n  adapterVersion: string;\n  framework: string;\n  frameworkVersion?: string;\n}\n\n```\n\n| Field  | Type | Description | Required? |\n| ---------- | ------- | - | - |\n| `adapterPackageName` | `string` |Name of the adapter (this should be the npm package name) | y |\n| `adapterVersion`| `string` | Version of the adapter | y |\n| `framework` | `string` | Name of the framework that is being supported | y |\n| `frameworkVersion` | `string` |Version of the framework that is being supported | n |\n\n### OutputFiles\n\nOutputFiles is an optional field to configure outputFiles and optimize server files + static assets.\n\n```typescript\ninterface OutputFiles {\n  serverApp: ServerApp\n}\n\n```\n\n| Field  | Type | Description | Required? |\n| ---------- | ------- | - | - |\n| `serverApp` | `ServerApp` | ServerApp holds configurations related to the serving files at runtime from Cloud Run | y |\n\n### ServerApp\n\nOutputFiles is an optional field to configure outputFiles and optimize server files + static assets.\n\n```typescript\ninterface ServerApp {\n  include:  string[]\n}\n\n```\n\n| Field  | Type | Description | Required? |\n| ---------- | ------- | - | - |\n| `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 |\n\n## Sample\n\nHere is a sample `.apphosting/bundle.yaml` file putting all this together:\n\n```yaml\nversion: v1\nrunConfig:\n  runCommand: node dist/index.js\n  environmentVariables:\n    - variable: VAR\n      value: 8080\n      availability: RUNTIME\n  concurrency: 80\n  cpu: 2\n  memoryMiB: 512\n  minInstances: 0\n  maxInstances: 14\n\noutputFiles:\n  serverApp:\n    include: \n      - dist\n      - .output\n    \nmetadata:\n  adapterPackageName: npm-name\n  adapterVersion: 12.0.0\n  framework: framework-name\n  frameworkVersion: 1.0.0\n```\n\nAs long as you have the `bundle.yaml` in this format, App Hosting will be able to deploy any framework that supports server side rendering.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffirebaseextended%2Ffirebase-framework-tools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffirebaseextended%2Ffirebase-framework-tools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffirebaseextended%2Ffirebase-framework-tools/lists"}