{"id":52038075,"url":"https://github.com/adobe/adobe-license-decoder.rs","last_synced_at":"2026-08-01T21:04:13.917Z","repository":{"id":43380264,"uuid":"310993266","full_name":"adobe/adobe-license-decoder.rs","owner":"adobe","description":"Decoder for FRL and SDL license files found on client machines.","archived":false,"fork":false,"pushed_at":"2024-04-08T12:49:00.000Z","size":1018,"stargazers_count":32,"open_issues_count":1,"forks_count":7,"subscribers_count":4,"default_branch":"master","last_synced_at":"2026-04-18T00:26:15.403Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/adobe.png","metadata":{"files":{"readme":"README.md","changelog":null,"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}},"created_at":"2020-11-08T05:34:03.000Z","updated_at":"2026-01-17T17:09:02.000Z","dependencies_parsed_at":"2023-01-19T20:46:06.337Z","dependency_job_id":null,"html_url":"https://github.com/adobe/adobe-license-decoder.rs","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/adobe/adobe-license-decoder.rs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobe%2Fadobe-license-decoder.rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobe%2Fadobe-license-decoder.rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobe%2Fadobe-license-decoder.rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobe%2Fadobe-license-decoder.rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adobe","download_url":"https://codeload.github.com/adobe/adobe-license-decoder.rs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobe%2Fadobe-license-decoder.rs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":36170393,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-08-01T02:00:05.789Z","response_time":100,"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":[],"created_at":"2026-08-01T21:04:13.214Z","updated_at":"2026-08-01T21:04:13.912Z","avatar_url":"https://github.com/adobe.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Adobe License Decoder\n\n[![Rust CI (stable)](https://github.com/adobe/adobe-license-decoder.rs/workflows/Rust%20CI%20(stable)/badge.svg)](https://github.com/adobe/adobe-license-decoder.rs/actions?query=workflow%3A%22Rust+CI+%28stable%29%22)\n\nAnyone who has worked with FRL or SDL licensing is familiar with the adobe-licensing-toolkit command-line tool for Mac and Windows.  This tool runs on client machines in the context of a particular user account and provides information about the state of FRL and SDL licenses that are installed on the machine, including: \n\n- the so-called \"npdId\" (also known as the \"package id\") of the license;\n- whether the license is activated for the given user; and\n- if activated, what the expiration date is of the license.\n\nWhile this information is invaluable, it's specific to the user account it is run in, and it doesn't give any general information about the licenses that are installed on the machine that haven't been used.\n\nEnter the `adobe-license-decoder`, a different command-line tool that can tell you about FRL and SDL license files both before and after installation.  This tool can examine globally-installed SDL and FRL license files and tell you which apps they are for, which packages they are from, when they were installed, when they expire, and so on.  It's like a \"secret decoder ring\" for the licenses!\n\n## Installation\n\nThe adobe-license-decoder is a command line tool that doesn't require any special privileges.  So to install it on a given machine, just download the appropriate Mac or Win binary from the [latest release page](https://github.com/adobeDan/adobe-license-decoder.rs/releases/latest), rename it without the platform suffix (to `adobe-license-decoder` or `adobe-license-decoder.exe`), and put it somewhere in your command-line search path.  It can then be invoked as `adobe-license-decoder` from any command line (examples below).\n\n## Usage\n\nIf invoked without any command-line arguments, the adobe-license-decoder will look for a globally installed OperatingConfigs directory, and decode all the license files found in that directory.\n\nIf you have some other directory that you want it to look in for license files (for example, if your customer zipped up their OperatingConfigs directory and sent the zip to you), just name that directory on the command line, as in:\n\n```\nadobe-license-decoder customer-license-files\n```\n\nIf you have a package, you can invoke the decoder on the package directory (the root of the expanded zip file) as well. This works both for packages that include apps and for license-only packages. For example:\n\n```\nadobe-license-decoder online-illustrator_en_US\n```\n\nFinally, if you have a single license file (a file whose name ends in `operatingconfig`), a single preconditioning file (a JSON file that can be installed by the `adobe-licensing-toolkit`), or a single package description file (a file whose name ends in `.ccp`) that you want decoded, you can specify the name of the file itself instead of a directory, as in:\n\n```\nadobe-license-decoder ngl-preconditioning-data.json\n```\n\nIn addition to the (optional) directory or file argument, the decoder takes an optional `-v` flag that causes the report it produces to give more information about packages, such as showing the specific census codes in FRL Isolated packages.  If you specify this flag more than once (`-vv`), then the decoder will look in the current user's credential store to find locally cached licenses for installed packages.  The next section shows some examples of the additional information.\n\n## How to Read the Decoder's Reports\n\nThe following is a sample run of the adobe-license-decoder tool on a FRL Online package.  It shows the common data for the package at the top, followed by a list of the applications licensed by the package.  You can see immediately that it's an FRL Online package, that it was built against the standard server endpoint, that it's for a CC All Apps license, and so on.\n\n```\n$ adobe-license-decoder online-default-allapps\nPreconditioning data for npdId: NzBjZmVlYWItNzc2Ni00ZTNiLTk4NjQtNjczYjc5ZDM2ZGRk\n    License type: FRL Online (server: https://lcs-cops.adobe.io/)\n    License expiry date: controlled by server\n    Precedence: 90 (CC All Apps)\nApplication Licenses:\n 1: App ID: AcrobatDC1\n 2: App ID: AfterEffects1\n 3: App ID: Animate1\n 4: App ID: Audition1\n 5: App ID: Bridge1\n 6: App ID: CharacterAnimator1\n 7: App ID: Dreamweaver1\n 8: App ID: Illustrator1\n 9: App ID: InCopy1\n10: App ID: InDesign1\n11: App ID: LightroomClassic1\n12: App ID: MediaEncoder1\n13: App ID: Photoshop1\n14: App ID: Prelude1\n15: App ID: PremierePro1\n```\n\nSuppose we were to install the package above, using this command line (on Mac):\n\n```\n$ sudo adobe-licensing-toolkit -p -i -f online-default-allapps/ngl-preconditioning-data.json\n```\n\nThen we could run the decoder with no arguments, and it would find the installed operating config files (as shown in the run below).  Since all the license files are for the same package, it still groups the package-specific information at the top of the list (but notice it now says \"License files for\" instead of \"Preconditioning data for\").  Then it shows the license-file-specific info for each of the licenses that are installed, giving the filename of the relevant operating configuration file (elided so it doesn't repeat the npdId segment of the filename each time), the specific application that license file is for, and the install date of the license file.  The install date is important, because on a machine that has multiple packages installed, and thus has multiple license files of the same precedence for the same application, it's the most recently installed license file that will be used by the app when it launches. (You may notice that the install dates don't match the order in which the files are listed: that's because the listings are always sorted by Application ID, but the adobe-licensing-toolkit installation is done in the order the app entries happen to appear in the preconditioning file.)\n\n```\n$ adobe-license-decoder\nLicense files for npdId: NzBjZmVlYWItNzc2Ni00ZTNiLTk4NjQtNjczYjc5ZDM2ZGRk:\n    License type: FRL Online (server: https://lcs-cops.adobe.io/)\n    License expiry date: controlled by server\n    Precedence: 90 (CC All Apps)\nFilenames (shown with '...' where the npdId appears):\n 1: QWNyb2JhdERDMXt9MjAxODA3MjAwNA-...-90.operatingconfig\n    App ID: AcrobatDC1\n    Install date: 2020-12-27 16:26:19 -08:00\n 2: QWZ0ZXJFZmZlY3RzMXt9MjAxODA3MjAwNA-...-90.operatingconfig\n    App ID: AfterEffects1\n    Install date: 2020-12-27 16:26:18 -08:00\n 3: QW5pbWF0ZTF7fTIwMTgwNzIwMDQ-...-90.operatingconfig\n    App ID: Animate1\n    Install date: 2020-12-27 16:26:06 -08:00\n 4: QXVkaXRpb24xe30yMDE4MDcyMDA0-...-90.operatingconfig\n    App ID: Audition1\n    Install date: 2020-12-27 16:26:11 -08:00\n 5: QnJpZGdlMXt9MjAxODA3MjAwNA-...-90.operatingconfig\n    App ID: Bridge1\n    Install date: 2020-12-27 16:26:17 -08:00\n 6: Q2hhcmFjdGVyQW5pbWF0b3Ixe30yMDE4MDcyMDA0-...-90.operatingconfig\n    App ID: CharacterAnimator1\n    Install date: 2020-12-27 16:26:12 -08:00\n 7: RHJlYW13ZWF2ZXIxe30yMDE4MDcyMDA0-...-90.operatingconfig\n    App ID: Dreamweaver1\n    Install date: 2020-12-27 16:26:09 -08:00\n 8: SWxsdXN0cmF0b3Ixe30yMDE4MDcyMDA0-...-90.operatingconfig\n    App ID: Illustrator1\n    Install date: 2020-12-27 16:26:05 -08:00\n 9: SW5Db3B5MXt9MjAxODA3MjAwNA-...-90.operatingconfig\n    App ID: InCopy1\n    Install date: 2020-12-27 16:26:07 -08:00\n10: SW5EZXNpZ24xe30yMDE4MDcyMDA0-...-90.operatingconfig\n    App ID: InDesign1\n    Install date: 2020-12-27 16:26:16 -08:00\n11: TGlnaHRyb29tQ2xhc3NpYzF7fTIwMTgwNzIwMDQ-...-90.operatingconfig\n    App ID: LightroomClassic1\n    Install date: 2020-12-27 16:26:13 -08:00\n12: TWVkaWFFbmNvZGVyMXt9MjAxODA3MjAwNA-...-90.operatingconfig\n    App ID: MediaEncoder1\n    Install date: 2020-12-27 16:26:08 -08:00\n13: UGhvdG9zaG9wMXt9MjAxODA3MjAwNA-...-90.operatingconfig\n    App ID: Photoshop1\n    Install date: 2020-12-27 16:26:10 -08:00\n14: UHJlbHVkZTF7fTIwMTgwNzIwMDQ-...-90.operatingconfig\n    App ID: Prelude1\n    Install date: 2020-12-27 16:26:15 -08:00\n15: UHJlbWllcmVQcm8xe30yMDE4MDcyMDA0-...-90.operatingconfig\n    App ID: PremierePro1\n    Install date: 2020-12-27 16:26:14 -08:00\n```\n\nNext, let's look at the information given about an FRL Isolated license.  Here we run the toolkit before installing the package, then install the package, then run the toolkit again afterwards.  Notice that, since this license doesn't contact a server, its expiration date is built into the package, so the decoder can tell you when the license will expire - this date includes the one-month grace past contract end we always give; it's the date that the apps will actually stop working.  Also, notice that this is a single-app license, as revealed by its precedence.  Finally, notice that we have specified the `-v` command-line flag so as to get additional information printed about the license (the Package UUID, the list of census codes for licensed machines, and the IDs of the certificate group in each license).\n\n```\n$ adobe-license-decoder -v isolated-photoshop/\n Preconditioning data for npdId: ZGQzMjhhY2MtZTE2Yy00NTI0LTgzOWItZGRkMDUwNTIzNGU0\n     Package UUID: dd328acc-e16c-4524-839b-ddd0505234e4\n     License type: FRL Isolated (2 codes)\n     License codes: BB7BAC-WXJ2KG-366ZHJ, BBEFWI-B79KPQ-DUIEZI\n     License expiry date: 2021-11-04\n     Precedence: 80 (CC Single App)\n Application Licenses:\n  1: App ID: Bridge1, Certificate Group: 2018072004\n  2: App ID: Photoshop1, Certificate Group: 2018072004\n$ sudo adobe-licensing-toolkit -p -i -f isolated-photoshop/ngl-preconditioning-data.json \n Adobe Licensing Toolkit (1.1.0.91)\n Operation Successfully Completed\n$ adobe-license-decoder -v\nLicense files for npdId: ZGQzMjhhY2MtZTE2Yy00NTI0LTgzOWItZGRkMDUwNTIzNGU0:\n    Package UUID: dd328acc-e16c-4524-839b-ddd0505234e4\n    License type: FRL Isolated (2 codes)\n    License codes: BB7BAC-WXJ2KG-366ZHJ, BBEFWI-B79KPQ-DUIEZI\n    License expiry date: 2021-11-04\n    Precedence: 80 (CC Single App)\nFilenames (shown with '...' where the npdId appears):\n 1: QnJpZGdlMXt9MjAxODA3MjAwNA-...-80.operatingconfig\n    App ID: Bridge1, Certificate Group: 2018072004\n    Install date: 2020-12-27 21:01:40 -08:00\n 2: UGhvdG9zaG9wMXt9MjAxODA3MjAwNA-...-80.operatingconfig\n    App ID: Photoshop1, Certificate Group: 2018072004\n    Install date: 2020-12-27 21:01:39 -08:00\n```\n\nNext, let's look at a run where we have installed a LAN package on top of the Isolated package.  (As above, we run the decoder over the package, then we install it, then we run the decoder to see what license files are on the machine.).  Because the LAN package and the Isolated package are both single-app packages, their licenses have the same precedence, so where there are two license files for the same application (in this case, Bridge), the LAN package will win because it has the later installation date.  It's in situations like these - where customers have installed two different packages on top of each other, that the decoder tool can really come in handy in understanding what's happened and in getting it fixed.\n\n```\n$ adobe-license-decoder lan-illustrator\nPreconditioning data for npdId: OTUzZTViZWYtYWJmMy00NGUxLWFjYjUtZmZhN2MyMDY4YjQx\n    License type: FRL LAN (server: https://test:123)\n    License expiry date: controlled by server\n    Precedence: 80 (CC Single App)\nApplication Licenses:\n 1: App ID: Bridge1\n 2: App ID: Illustrator1\n$ sudo adobe-licensing-toolkit -p -i -f lan-illustrator/ngl-preconditioning-data.json \nAdobe Licensing Toolkit (1.1.0.91)\nOperation Successfully Completed\n$ adobe-license-decoder\nLicense files for npdId: OTUzZTViZWYtYWJmMy00NGUxLWFjYjUtZmZhN2MyMDY4YjQx:\n    License type: FRL LAN (server: https://test:123)\n    License expiry date: controlled by server\n    Precedence: 80 (CC Single App)\nFilenames (shown with '...' where the npdId appears):\n 1: QnJpZGdlMXt9MjAxODA3MjAwNA-...-80.operatingconfig\n    App ID: Bridge1\n    Install date: 2020-12-27 21:04:14 -08:00\n 2: SWxsdXN0cmF0b3Ixe30yMDE4MDcyMDA0-...-80.operatingconfig\n    App ID: Illustrator1\n    Install date: 2020-12-27 21:04:13 -08:00\nLicense files for npdId: ZGQzMjhhY2MtZTE2Yy00NTI0LTgzOWItZGRkMDUwNTIzNGU0:\n    License type: FRL Isolated (2 codes)\n    License expiry date: 2021-11-04\n    Precedence: 80 (CC Single App)\nFilenames (shown with '...' where the npdId appears):\n 3: QnJpZGdlMXt9MjAxODA3MjAwNA-...-80.operatingconfig\n    App ID: Bridge1\n    Install date: 2020-12-27 21:01:40 -08:00\n 4: UGhvdG9zaG9wMXt9MjAxODA3MjAwNA-...-80.operatingconfig\n    App ID: Photoshop1\n    Install date: 2020-12-27 21:01:39 -08:00\n```\n\nFinally, let's look at a case where we have installed a Online package that uses an FRL proxy, and let's specify the `-vv` flag to look for locally cached licenses.  As you can see, the Photoshop application has been activated (and its expiration date is listed), but the Bridge application has not.  (On Mac, this command will typically pop up a dialog asking for permission to read each license in the login keychain.  Specify `Always Allow` in this dialog to prevent the dialog from appearing again.)\n\n```\n$ adobe-license-decoder -vv\nLicense files for npdId: ODU0YjU5OGQtOTE1Ni00NDZiLWFlZDYtMGQ1ZGM2ZmVhZDBi:\n    Package UUID: 854b598d-9156-446b-aed6-0d5dc6fead0b\n    License type: FRL Online (server: https://frl-proxy.brotsky.net:8443)\n    License expiry date: controlled by server\n    Precedence: 80 (CC Single App)\nFilenames (shown with '...' where the npdId appears):\n 1: QnJpZGdlMXt9MjAxODA3MjAwNA-...-80.operatingconfig\n    App ID: Bridge1, Certificate Group: 2018072004\n    Install date: 2021-02-17 22:49:32 -08:00\n    No cached activation\n 2: UGhvdG9zaG9wMXt9MjAxODA3MjAwNA-...-80.operatingconfig\n    App ID: Photoshop1, Certificate Group: 2018072004\n    Install date: 2021-02-17 22:49:31 -08:00\n    Cached activation expires: 2021-10-05\n```\n\n## Support\n\nThis tool is maintained by the Adobe DME Premium Onboarding team.  If you need support or just have questions about the `adobe-license-decoder`, please file an issue against this project.\n\n## Contributing\n\nContributions are welcomed! Read the [Contributing Guide](./.github/CONTRIBUTING.md) for more information.\n\n## License\n\nThis project is licensed under the MIT License. See [LICENSE](LICENSE) for more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadobe%2Fadobe-license-decoder.rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadobe%2Fadobe-license-decoder.rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadobe%2Fadobe-license-decoder.rs/lists"}