{"id":46794350,"url":"https://github.com/adobe/edgly","last_synced_at":"2026-04-29T03:08:36.406Z","repository":{"id":273616141,"uuid":"904466286","full_name":"adobe/edgly","owner":"adobe","description":"Command line tool to boost Fastly VCL service development","archived":false,"fork":false,"pushed_at":"2026-04-27T16:56:49.000Z","size":389,"stargazers_count":5,"open_issues_count":6,"forks_count":0,"subscribers_count":23,"default_branch":"main","last_synced_at":"2026-04-27T18:36:20.979Z","etag":null,"topics":["developer-tools","fastly","fiddle","vcl"],"latest_commit_sha":null,"homepage":"","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/adobe.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":"COPYRIGHT","agents":null,"dco":null,"cla":null}},"created_at":"2024-12-17T00:16:43.000Z","updated_at":"2026-03-12T15:15:42.000Z","dependencies_parsed_at":"2026-02-12T15:04:21.025Z","dependency_job_id":null,"html_url":"https://github.com/adobe/edgly","commit_stats":null,"previous_names":["adobe/edgly"],"tags_count":30,"template":false,"template_full_name":null,"purl":"pkg:github/adobe/edgly","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobe%2Fedgly","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobe%2Fedgly/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobe%2Fedgly/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobe%2Fedgly/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adobe","download_url":"https://codeload.github.com/adobe/edgly/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobe%2Fedgly/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32407195,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-28T19:38:08.556Z","status":"online","status_checked_at":"2026-04-29T02:00:06.602Z","response_time":110,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["developer-tools","fastly","fiddle","vcl"],"created_at":"2026-03-10T03:33:31.243Z","updated_at":"2026-04-29T03:08:36.388Z","avatar_url":"https://github.com/adobe.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# @adobe/edgly\n\n\u003e Command line tool to boost Fastly VCL service development\n\n[![NPM Version](https://img.shields.io/npm/v/%40adobe%2Fedgly)](https://www.npmjs.com/package/@adobe/edgly)\n[![GitHub license](https://img.shields.io/github/license/adobe/edgly.svg)](https://github.com/adobe/edgly/blob/main/LICENSE)\n[![GitHub issues](https://img.shields.io/github/issues/adobe/edgly.svg)](https://github.com/adobe/edgly/issues)\n[![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/adobe/edgly/main.yml)](https://github.com/adobe/edgly/actions/workflows/main.yml)\n\n---\n\n`edgly` enables version control for [Fastly™ VCL services](https://www.fastly.com/documentation/guides/vcl/) with these features:\n\n* Syncing between a local version controlled folder and a [Fastly VCL service](https://www.fastly.com/documentation/guides/vcl/)\n* Staging environments for validating changes on real Fastly infrastructure before deploying to production\n* Syncing with [Fiddles](https://fiddle.fastly.dev) to develop and test VCL snippets connected to version control\n* Source [file structure](#files) for convenient editing, reading, diffing and reviewing of VCL code and service config\n* Secret detection to prevent accidentally commiting credentials to version control\n* Variable replacement for secrets and other dynamic configuration using `${{VAR}}`\n* Automatic testing of services using HTTP test framework leveraging `*.http` files\n\nFastly is a service and trademark by [Fastly, Inc](https://www.fastly.com).\n\n#### Table of Contents\n\u003c!-- @import \"[TOC]\" {cmd=\"toc\" depthFrom=2 depthTo=2 orderedList=false } --\u003e\n\n\u003c!-- code_chunk_output --\u003e\n\n- [Installation](#installation)\n- [Usage](#usage)\n- [Test Framework](#test-framework)\n- [Files](#files)\n- [Contributing](#contributing)\n- [Licensing](#licensing)\n\n\u003c!-- /code_chunk_output --\u003e\n\n\n## Installation\n\n```sh\nnpm install -g @adobe/edgly\n```\n\n## Usage\n\nThis diagram shows the development workflow supported using `edgly`:\n\n![devflow](./devflow.svg)\n\n### CLI usage\n```\n                             _       _       \n                     ___  __| | __ _| |_   _ \n                    / _ \\/ _` |/ _` | | | | |\n                   |  __/ (_| | (_| | | |_| |\n                    \\___|\\__,_|\\__, |_|\\__, |\n                               |___/   |___/ \n\n                  https://github.com/adobe/edgly\n\nUSAGE\n  edgly \u003ccommand\u003e [OPTS]\n\nBoost Fastly™️ VCL service development\n\nCOMMANDS\n  service             Fastly VCL service commands\n  fiddle              Fastly VCL fiddle commands\n  test                Run HTTP request tests\n  version             Show version info\n  shell-completion    Print completion script for .bashrc or .zshrc\n\nGLOBAL OPTIONS\n  -c, --config   Configuration file             [string] [default: \"edgly.yaml\"]\n  -v, --verbose  Verbose output                                        [boolean]\n  -h, --help     Show help                                             [boolean]\n\n  Options can also be set as environment variables prefixed with EDGLY_.\n  Example: --api-token becomes EDGLY_API_TOKEN.\n```\n\n### Get Fastly API Token\n\nInteracting with the Fastly APIs (mostly `edgly service` commands) requires your personal Fastly API token.\n\n1. [Retrieve your Fastly API token](https://docs.fastly.com/en/guides/using-api-tokens#creating-api-tokens)\n2. Set it as `EDGLY_API_TOKEN` environment variable in your shell/terminal:\n   ```\n   export EDGLY_API_TOKEN=\u003ctoken\u003e\n   ```\n\nAlternatively you can also set it as argument on certain commands using `-t/--api-token \u003ctoken\u003e`.\n\n### Initial setup\n\n1. Create new service or use existing service from [Fastly](https://manage.fastly.com)\n2. Get the service id from the Fastly UI\n3. Open shell inside a git repo (one repo per Fastly service recommended)\n4. [Set your Fastly API token](#get-fastly-api-token) inside the shell (if not yet)\n5. Fetch the service configuration\n   ```sh\n   edgly service get --id \u003cservice-id\u003e\n   ```\n   * Above will pull the `latest` version.\n   * You can fetch the currently active version using\n     ```sh\n     edgly service get --id \u003cservice-id\u003e -V active\n     ```\n   * You can fetch a specific version number using\n     ```sh\n     edgly service get --id \u003cservice-id\u003e -V 42\n     ```\n6. Review for any secrets detected\n7. Commit the newly added files\n\n8. This will store the `\u003cservice-id\u003e` in `edgly.yaml` and assume this to be the `production` environment.\n9. Further updates (pulls) from the service can be done using just\n   ```sh\n   edgly service get\n   ```\n\n### Initial setup to create a stage environment\n\nA stage environment allows to safely test changes in Fastly before deploying to the production service.\n\nPlease note this simply creates another VCL service in Fastly with separate domain names (that you have to define) to represent a stage environment. It does NOT currently use or support the [Fastly staging feature](https://docs.fastly.com/en/guides/working-with-staging) introduced in Spring 2025.\n\n1. Add your choice of stage domains to [domains.yaml](#domainsyaml):\n   ```yaml\n   ...\n   # environment 'stage'\n   stage:\n     - stage.example.com\n     - stage2.example.com\n   ```\n2. [Set your Fastly API token](#get-fastly-api-token) inside the shell (if not yet)\n3. Create stage service:\n   ```sh\n   edgly service create --env stage\n   ```\n4. By default this will name the stage service `\u003cname\u003e (stage)`. Use `--name \u003cname\u003e` to set a different name.\n5. This will store the new stage service id in `edgly.yaml`. Commit this file and the updated `domains.yaml`.\n\n### Develop changes using Fiddles\n\nDeveloping with [Fastly Fiddles](https://fiddle.fastly.dev) is helpful as it allows to debug request handling in Fastly in depth. Note this will not work if the service uses entire VCL files, it only works with VCL snippets.\n\n1. Create a new fiddle:\n   ```sh\n   edgly fiddle create\n   ```\n2. Click the printed link to open the Fiddle\n3. Develop the VCL code in the Fiddle\n4. To define separate snippets, use comment headers as described in [snippets format](#snippetsvcl)\n5. Copy any tests needed for the work into the Fiddle\n6. When done, pull the changes from the Fiddle:\n   ```sh\n   edgly fiddle get \u003cfiddle-url\u003e\n   ```\n6. Review the changes and commit\n\n### Test changes in stage then deploy to production\n\n1. [Set your Fastly API token](#get-fastly-api-token) inside the shell (if not yet)\n2. Deploy to stage:\n   ```sh\n   edgly service update --env stage --activate\n   ```\n3. Wait for Fastly changes to rollout, usually less than 30 seconds\n4. Run any tests against stage\n   ```sh\n   HOST=https://stage.example.com edgly test\n   ```\n5. If successful, deploy to production:\n   ```sh\n   edgly service update --activate\n   ```\n6. If something goes wrong, revert to old version using the Fastly UI\n\n### Safely try out any changes in stage\n\nSometimes you might want to safely try out changes via the Fastly service UI without impacting production. This can be done on the stage service:\n\n1. (Optional) Ensure stage is up to date with latest changes from version control:\n   ```sh\n   edgly service update -e stage\n   ```\n3. In the Fastly UI, make changes to your stage service (and activate)\n4. Test changes\n   1. manually test if that change works as expected\n   2. run tests against stage\n      ```sh\n      HOST=\u003cstage-host\u003e edgly test\n      ```\n   3. ideally add new test case to `*.http` files\n6. Iterate 2 and 3 until change is complete\n7. Fetch changes from stage into version control:\n   ```sh\n   edgly service get -e stage\n   ```\n8. Commit\n9. Deploy to production:\n   ```sh\n   edgly service update --activate\n   ```\n\n## Test Framework\n\nThe test framework supports running HTTP requests against your domain (Fastly service) and is compatible with Fastly Fiddle Tests. This allows sync and copy-and-paste between automated tests and Fastly Fiddles. It requires separate installation of the [tepi](https://tepi.deno.dev/) test tool, which is [Deno](https://deno.land/) based.\n\n### Install tepi\n\nNote that at least tepi version `1.1.4` is required (as of `edgly` version `1.3.4`).\n\nTest execution requires installation of [tepi](https://tepi.deno.dev/):\n1. Install [deno](https://deno.land/)\n2. Install [tepi](https://tepi.deno.dev/)\n\n   ```\n   deno install --global --reload  --allow-read --allow-env --allow-net --allow-run -f -n tepi https://tepi.deno.dev/src/cli.ts\n   ```\n\n### Test case syntax\n\n1. Tests are defined in `*.http` files in a `tests` folder (non configurable)\n2. Each file can have multiple tests\n3. Test format is the [tepi](https://tepi.deno.dev/) one, but supporting [Fastly Fiddle Tests](https://www.fastly.com/documentation/reference/tools/fiddle/testing/) in the response assertions\n4. Supported Fiddle test assertions are documented in [TESTS.md](TESTS.md)\n   - Note: Technically the Tepi assertions are also supported. However, it is recommended to stick to Fastly Fiddle Tests only.\n5. Syntax\n   ```\n   ---\n   \u003cfile metadata\u003e (optional)\n   ---\n\n   ###\n   ---\n   \u003ctest metadata\u003e (optional)\n   ---\n   POST /path\n   \u003cheaders\u003e  (optional)\n\n   \u003cbody\u003e (optional)\n\n   \u003cassertions\u003e\n\n   ###\n   ```\n\n#### Example test file\n\nExample `*.http` file with two tests:\n\n```\n---\nhost: \u003c%= Deno.env.get('HOST') || 'https://example.com' %\u003e\n---\n\n###\nGET /status=200\n\nclientFetch.status is 200\nclientFetch.bodyPreview is \"\"\n\n\n###\n---\nid: example\n---\nPOST /status=200\nHeader: value\n\n{\"request\": \"body\"}\n\nclientFetch.status is 200\n```\n\n### Run tests\n\nRun tests against production:\n```\nedgly test\n```\n\nCustom host:\n```\nHOST=https://thumbnails.findmy.media  edgly test\n```\n\nRun specific test file:\n```\nedgly test tests/image.http\n```\n\nRun individual test:\n```\n# :5 = line number where test starts, the ### line\nedgly test tests/image.http:5\n```\n\n### Visual Studio Code test support\n\nThe [tepi VS Code extension](https://marketplace.visualstudio.com/items?itemName=jupegarnica.tepi) can be supported, for syntax highlighting and test execution within the IDE.\n\n#### VS Code setup\n\n1. Add a file named `tepi` in the root of your VS Code workspace\n   ```sh\n   #!/bin/sh\n   edgly test \"$@\"\n   ```\n2. Ensure the file is executable\n   ```sh\n   chmod u+x tepi\n   ```\n3. Add this to the VS Code workspace settings to prefer it to use this executable (come first on PATH):\n   ```json\n     \"terminal.integrated.env.osx\": {\n       \"PATH\": \".:${env:PATH}\"\n     }\n   ```\n4. Reload window or restart VS Code to apply PATH change\n5. Commit both `tepi` and `.vscode/settings.json` files to version control\n\n#### VS Code test development flow\n\nInside VS Code you can now run tests individually:\n\n1. Install [tepi extension for VS Code](https://marketplace.visualstudio.com/items?itemName=jupegarnica.tepi)\n2. Open `tests/*.http` files in VS Code\n3. Edit tests\n4. Run test using the extension\n   1. Run single test: click `run` above test case\n   2. Run single test with full request/response output: click `run -d`\n   3. Run all tests in file: click `run file`\n   4. Run all tests: run `tepi` in terminal\n\n## Files\n\n| File | Purpose |\n|------|---------|\n| [edgly.yaml](#edglyyaml) | Meta-configuration for `edgly` itself |\n| [service.json](#servicejson) | All Fastly service configuration that is not stored in any other files |\n| [domains.yaml](#domainsyaml) | [Domains](https://docs.fastly.com/en/guides/working-with-domains) of the service (for all environments) |\n| [snippets/*.vcl](#snippetsvcl) | [VCL snippets](https://docs.fastly.com/en/guides/using-regular-vcl-snippets) code |\n| [vcl/*.vcl](#vclvcl) | [VCL files](https://docs.fastly.com/en/guides/uploading-custom-vcl) code. These are not supported in the [Fiddle feature](#develop-changes-using-fiddles)|\n| [dictionaries/*.ini](#dictionariesini) | [Edge Dictionaries](https://docs.fastly.com/en/guides/about-dictionaries) for configuration |\n| [dictionaries/private.*.ini](#dictionariesprivateini) | [Private dictionaries](https://docs.fastly.com/en/guides/working-with-dictionaries#private-dictionaries) for secrets |\n| [acl.json](#acljson) | [IP access control lists](https://docs.fastly.com/en/guides/about-acls) |\n| [tests/*.http](#test-framework) | Test files for the [HTTP Test framework](#test-framework) |\n| `tests/fiddle.http` | Test file that will be synced to Fiddle test requests in `edgly fiddle create` and `edgly fiddle get`. To use a different file, set `--test-file \u003cfile\u003e`. |\n\n### Environment variable replacement\n\nMost files below will support `${{VAR}}` environment variable replacement. This allows to inject dynamic values at runtime of `edgly` before updating the Fastly service, for example to keep secrets out of version control.\n\nFormat:\n\n```\n${{VAR}}\n```\n\nWhen running applicable comamnds such as`edgly service update` or `edgly service create`, the placeholder `${{VAR}}` will be replaced with the value of the environment variable `VAR`, which must be set in shell environment.\n\n### edgly.yaml\n\n`edgly` uses a `edgly.yaml` file in the current directory to store `edgly` specific configurations that are separate from the actual Fastly service definition. The file must also be version controlled and shared with the team. Most importantly, it tracks the service ids for the different environments.\n\nFull configuration file example:\n\n```yaml\n# environment specific settings\n# 'production' is the default and service.json is expected to be from production env\n# other environment names can be custom and used with '-e \u003cenv\u003e' on the cli\nenv:\n  production:\n    # fastly service id\n    id: abcd1234\n  stage:\n    id: efgh5678\n  dev:\n    id: ijkl9012\n\n# settings for fiddle sub commands\nfiddle:\n  # use different backends in fiddles\n  backends:\n    S3: \"https://safe-s3.aws.com\"\n\n# settings for secret detection\nsecrets:\n  # custom threshold for entropy to consider something a secret\n  # default is 4.5 and should normally be not changed\n  entropy_threshold: 3.8\n  # list of dictionary keys to skip when detecting secrets\n  # good to ignore false positives\n  ignore_keys:\n    - MY_KEY\n    - S3_BUCKET\n  # list of values to ignore when detecting secrets\n  # good to ignore false positives\n  ignore_values:\n    - some-value-that-looks-like-a-secret\n    - another-false-positive\n```\n\n### service.json\n\nThis file stores all service configuration that is not in any other files. This file format is basically an aggregation of the [Fastly service API](https://www.fastly.com/documentation/reference/api/services/) json responses.\n\nChanging these settings is usually best done using the Fastly UI and then using `edgly service get -v \u003cversion\u003e\u003e` to fetch the updated values.\n\n### domains.yaml\n\nThis file defines the [domains](https://docs.fastly.com/en/guides/working-with-domains) of the service for all environments (selected via `-e \u003cenv\u003e` on the CLI).\n\n```yaml\nproduction:\n  - name: example.com\n    comment: Main site\n  - name: example2.com\n    comment: \"Secondary site\"\nstage:\n  # comments are optional, just a list of domains as strings is enough\n  - stage.example.com\n  - stage2.example.com\ndev:\n  - dev.example.com\n  - dev2.example.com\n```\n\n#### History of domain configuration\n\nUp until version `1.2.x`, domain configuration was stored in `edgly.yaml`. This was moved to the new `domains.yaml` file starting in version `1.3.0`.\n\n`edgly service get` (when fetching from production) will automatically migrate the configuration to the new `domains.yaml` file:\n\n```\n\u003e edgly service get\n...\nFound domains in edgly.yaml. Automatically migrating them to domains.yaml.\n```\n\nOther commands will provide a hint about the need to migrate:\n\n```\n\u003e edgly service update\n...\nFound domains in edgly.yaml. 'edgly service get' (production) will migrate them to domains.yaml.\n```\n\nThe old configuration in `edgly.yaml` required to provide a map of the production domains to the domains for other environments:\n\n```yaml\nenv:\n  production:\n    id: 12345\n  stage:\n    id: 67890\n    domains:\n      example.com: \"stage.example.com\"\n      example2.com: \"stage2.example.com\"\n```\n\nThe production domains were stored in the `service.json` file, which was confusing. More importantly, this design created [issue #25](https://github.com/adobe/edgly/issues/25) and thus starting with `1.3.0` domains are configured as first-class citizens in `domains.yaml` and are listed there for all environments including production.\n\n\n### snippets/*.vcl\n\nThis contains the code for any [VCL snippets](https://docs.fastly.com/en/guides/using-regular-vcl-snippets). There will be one file for each VCL phase, containing all the snippets for that phase. Snippets are generally recommended since they work with Fiddles with `edgly`, unlike VCL files.\n\nFolder structure example:\n```\nsnippets/\n  init.vcl\n  recv.vcl\n  fetch.vcl\n```\n\nEach file will contain surrounding VCL boilerplate to make syntax highlighting and IDE extensions such as [Fastly VCL for VS Code](https://marketplace.visualstudio.com/items?itemName=fastly.vscode-fastly-vcl) work.\n\nExample `snippets/deliver.vcl`:\n\n```vcl\ninclude \"init.vcl\";\n\nsub vcl_deliver {\n  #FASTLY deliver\n\n  # ===================================================================\n  # name: deliver 100 - unset undesired headers\n  # prio: 100\n  # ===================================================================\n\n  unset resp.http.server;\n  unset resp.http.via;\n\n  # ===================================================================\n  # name: deliver 200 - set x-custom-header\n  # prio: 200\n  # ===================================================================\n\n  set resp.http.x-custom-header = \"custom value\";\n\n  # ===================================================================\n}\n```\n\nThe actual snippets are defined using **structured comment headers**. These set the name and priority, and are ordered by priority number:\n\n```vcl\n  # ===================================================================\n  # name: \u003csnippet-name\u003e\n  # prio: \u003cpriority\u003e\n  # ===================================================================\n\n  \u003cVCL code\u003e\n\n  # ===================================================================\n```\n\nWhen creating new snippets this format has to be strictly followed. You will also see this format in the Fiddles created by `edgly fiddle create` when [developing changes using Fiddles](#develop-changes-using-fiddles). To \"create\" new snippets while coding in Fiddles, the above format has to be followed exactly. The granularity of snippets is the choice of the developer.\n\n### vcl/*.vcl\n\nThis stores any [VCL files](https://docs.fastly.com/en/guides/uploading-custom-vcl) of the service.\n\nEach custom VCL file will be stored by it's name in the `vcl` folder:\n```\nvcl/\n  custom.vcl\n  another.vcl\n```\n\nGenerally one should avoid mixing VCL snippets and VCL files in the same service/project. VCL files are not supported in Fiddles with `edgly fiddle *`.\n\n### dictionaries/*.ini\n\nThis defines the [Edge Dictionaries](https://docs.fastly.com/en/guides/about-dictionaries) allowing configuration that can also be changed in Fastly without a service redeployment.\n\nThese are stored in a simple variant of the [INI file format](https://en.wikipedia.org/wiki/INI_file).\n\nExample `dictionaries/config.ini`:\n\n```ini\nS3_BUCKET=\"my-bucket\"\nS3_REGION=\"us-east-1\"\n```\n\nEach key-value pair corresponds to a dictionary item.\n\nNote that double-quoting values is highly recommended (and `edgly service get` will automatically quote values when writing to disk).\n\nThis does not support or use INI sections. Comments can be lost on round-tripping through `edgly service update` and `edgly service get`.\n\n### dictionaries/private.*.ini\n\n[Private dictionaries](https://docs.fastly.com/en/guides/working-with-dictionaries#private-dictionaries) are stored like [regular dictionaries](#dictionariesini) but using the filename pattern `private.*.ini`.\n\nAs these usually contain secrets, one can use the [environment variable replacement](#environment-variable-replacement) feature of `edgly`.\n\nExample `private.secrets.ini`:\n```ini\n# Private (write-only) dictionary 'secrets'\n# last_updated: 2024-05-20 22:02:28\n# item_count: 6\n# digest: 123456789abcdef\nS3_ACCESS_KEY=\"${{S3_ACCESS_KEY}}\"\nS3_SECRET_KEY=\"${{S3_SECRET_KEY}}\"\n```\n\n\n### acl.json\n\nStores any [IP access control lists](https://docs.fastly.com/en/guides/about-acls) in the JSON format of the [Fastly ACL API](https://www.fastly.com/documentation/reference/api/acls/).\n\n`acl.json` example:\n```json\n[\n  {\n    \"id\": \"abcdef123456789\",\n    \"name\": \"my_ips\",\n    \"entries\": [\n      {\n        \"comment\": \"Local 1\",\n        \"id\": \"abcdef1111111\",\n        \"ip\": \"127.0.0.1\",\n        \"negated\": \"0\",\n        \"subnet\": 32\n      },\n      {\n        \"comment\": \"Local 2\",\n        \"id\": \"abcdef999999\",\n        \"ip\": \"127.0.0.2\",\n        \"negated\": \"0\",\n        \"subnet\": 32\n      }\n    ]\n  }\n]\n```\n\n\n## Contributing\nContributions are welcome! Read the [Contributing Guide](./.github/CONTRIBUTING.md) for more information.\n\n## Licensing\nThis project is licensed under the Apache V2 License. See [LICENSE](LICENSE) for more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadobe%2Fedgly","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadobe%2Fedgly","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadobe%2Fedgly/lists"}