Skip to content

feat(archive): read Adobe extension packages (.zxp) like JAR - #1398

Merged
KnifeLemon merged 3 commits into
mainfrom
feat/zxp-archive-1382
Nov 12, 2026
Merged

KnifeLemon merged 3 commits into
mainfrom
feat/zxp-archive-1382

Conversation

@KnifeLemon

Copy link
Copy Markdown
Owner

What users notice

Adobe extension packages (.zxp), the panels and plug-ins installed into After Effects, Premiere Pro, Photoshop and other Creative Cloud apps, open on the archives donut. They can be extracted to a folder or converted to ZIP, 7Z, TAR and the other archive targets, the same way JAR works. A ZXP is a signed ZIP (mimetype, the extension's files, META-INF/signatures.xml), so the bundled 7-Zip reads it and no new engine is needed.

It is read only: Filee never writes .zxp, because Adobe's apps only install packages signed with the developer's certificate (ZXPSignCmd).

What changed

  • src/Filee.Core/Formats/FormatRegistry.cs: zxp as a read-only archive next to jar.
  • src/Filee.Core/Formats/FormatFields.cs: graded specialist, Developer field, like JAR.
  • src/Filee.Engines/Archives/ArchiveExtractor.cs: zxp among the formats 7-Zip reads.
  • src/Filee.Core/Settings/UserDataStore.cs, AppSettings.cs: settings schema 82 adds .zxp to existing archives donuts; custom claims stay put. 80 is claimed by feat(image): read Windows animated cursors (.ani) #1390 and 81 by [Format]: .xm #1376 (tracker modules), so this may need renumbering depending on merge order.
  • docs/ENGINES.md: ZXP in the archive table and a short paragraph.

Tests

  • tests/Filee.Core.Tests/ZxpFormatTests.cs (new): detection, archives donut, schema 82 migration (learns once, leaves a user's own claim, survives a restart).
  • tests/Filee.Core.Tests/FormatFieldsTests.cs: the pinned lists and the specialist count.
  • tests/Filee.Engines.Tests/ArchiveTests.cs: ZXP in the one-step route theory, no route into ZXP, and a .zxp built by the test (Adobe's layout, with a stored mimetype first) that extracts byte for byte and converts to panel.zip with every entry.
  • tests/Filee.Engines.Tests/ArchiveIsoTests.cs: ZXP → ISO.
  • Ran locally: Filee.Core.Tests (all), ArchiveTests and ArchiveIsoTests with the bundled 7-Zip. dotnet format --verify-no-changes is clean on the touched projects.

Not covered

  • Only tested with a ZXP made by the test, not a real signed one from Adobe Exchange. The signature isn't checked; it is kept as a file.
  • macOS and Linux not run locally (the code path is the same 7-Zip extraction as JAR).

Closes #1382

🤖 Generated with Claude Code

A .zxp, the package of an After Effects, Premiere Pro or Photoshop
extension, is a signed ZIP: the bundled 7-Zip extracts it and it
converts to every archive target, its META-INF/signatures.xml kept as
a file. It is never a target, since Adobe's apps install only packages
signed with the developer's certificate.

Settings schema 82 adds .zxp to existing archives donuts without
taking custom claims (80 and 81 are claimed by #1390 and #1376).

Closes #1382

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added the feature New features label Nov 11, 2026
# Conflicts:
#	src/Filee.Core/Settings/AppSettings.cs
#	src/Filee.Core/Settings/UserDataStore.cs
# Conflicts:
#	src/Filee.Core/Settings/AppSettings.cs
#	src/Filee.Core/Settings/UserDataStore.cs
#	tests/Filee.Core.Tests/FormatFieldsTests.cs
@KnifeLemon
KnifeLemon merged commit c458122 into main Nov 12, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature New features

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Format]: .zxp

1 participant