Skip to content

Remove newtonsoft, make the library native aot compatible #195

@idan-h

Description

@idan-h

Chore

Describe the chore

Bring supabase-csharp (and the sub-packages we use) up to .NET Native AOT so a dotnet publish -c Release -p:PublishAot=true build succeeds, and there are no runtime errors.

Acceptance criteria

  • AOT publish finishes without linker errors or reflection warnings.
  • App boots and runs basic Supabase flows (auth, simple CRUD) in the published binary.
  • CI job produces an AOT artifact.

Steps

  1. Add a repo-level Directory.Build.props with:

    <Project>
      <PropertyGroup>
        <PublishAot>true</PublishAot>
        <PublishTrimmed>true</PublishTrimmed>
        <InvariantGlobalization>true</InvariantGlobalization>
        <EnableDynamicLoading>false</EnableDynamicLoading>
      </PropertyGroup>
    </Project>
  2. Swap Newtonsoft.Json for System.Text.Json + source-generated context.

  3. Mark BaseModel with DynamicallyAccessedMembers and tag helper methods that use reflection with RequiresUnreferencedCode.

  4. Replace Activator.CreateInstance calls with new T().

  5. Run:

    dotnet restore
    dotnet build -c Release
    dotnet publish -c Release -p\:PublishAot=true -p\:SelfContained=true -o ./aot
    

    Fix any remaining trim warnings.

  6. Update CI pipeline to run the publish step and cache the output.

Additional context

Reference the detailed checklist in docs/aot-supabase-notes.md.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions