defmodule ExZarr.MixProject do use Mix.Project @version "1.1.0" @source_url "https://github.com/thanos/ExZarr" def project do [ app: :ex_zarr, version: @version, elixir: "~> 1.14", start_permanent: Mix.env() == :prod, deps: deps(), compilers: Mix.compilers(), aliases: aliases(), # Package info description: description(), package: package(), docs: docs(), name: "ExZarr", source_url: @source_url, # Testing test_coverage: [tool: ExCoveralls], # Dialyzer dialyzer: [ plt_file: {:no_warn, "priv/plts/dialyzer.plt"}, plt_add_apps: [:mix, :ex_unit], flags: [:underspecs, :unmatched_returns], ignore_warnings: ".dialyzer_ignore.exs" ] ] end defp aliases do [ compile: ["compile", "fix_nif_rpaths"] ] end def application do [ mod: {ExZarr.Application, []}, extra_applications: [:logger, :crypto, :mnesia] ] end def cli do [ preferred_envs: [ coveralls: :test, "coveralls.detail": :test, "coveralls.post": :test, "coveralls.html": :test, "coveralls.github": :test, "coveralls.cobertura": :test ] ] end defp deps do [ # JSON encoding/decoding for metadata {:jason, "~> 1.4"}, # Zig NIFs for compression codecs {:zigler, "~> 0.16", runtime: false}, # Cloud storage backends (optional) {:ex_aws, "~> 2.5", optional: true}, {:ex_aws_s3, "~> 2.5", optional: true}, {:sweet_xml, "~> 0.7", optional: true}, {:goth, "~> 1.4", optional: true}, {:google_api_storage, "~> 0.36", optional: true}, {:azurex, "~> 1.1"}, {:req, "~> 0.4", optional: true}, # Database storage backends (optional) {:mongodb_driver, "~> 1.4", optional: true}, # Observability {:telemetry, "~> 1.2"}, # Numerical computing (optional) {:nx, "~> 0.7", optional: true}, # Streaming pipelines (optional) {:flow, "~> 1.2", optional: true}, {:gen_stage, "~> 1.2", optional: true}, {:broadway, "~> 1.0", optional: true}, # Documentation — no :only: zig_doc (zigler transitive dep) requires ex_doc in prod {:ex_doc, "~> 0.39", runtime: false}, {:credo, "~> 1.7", only: [:dev, :test], runtime: false}, {:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false}, {:excoveralls, "~> 0.18", only: :test}, {:stream_data, "~> 1.1", only: [:dev, :test]}, {:mox, "~> 1.1", only: :test}, {:benchee, "~> 1.3", only: :dev}, {:sobelow, "~> 0.14", only: [:dev, :test], runtime: false, warn_if_outdated: true} ] end defp description do """ Pure Elixir implementation of Zarr v2 and v3: compressed, chunked, N-dimensional arrays with full Python zarr-python compatibility. Supports chunk streaming, custom encoders, and multiple storage backends including S3 and GCS. """ end defp package do [ name: "ex_zarr", licenses: ["MIT"], links: %{ "GitHub" => @source_url, "Changelog" => "#{@source_url}/blob/main/CHANGELOG.md", "Zarr Specification" => "https://zarr.dev" }, maintainers: ["Thanos Vassilakis"], files: [ "lib", # Only include NIFs, not PLTs "priv/lib", "native", ".formatter.exs", "mix.exs", "README.md", "CHANGELOG.md", "INTEROPERABILITY.md", "LICENSE" ] ] end defp docs do [ main: "ExZarr", extras: [ # Getting Started "README.md", "ZARR_V3_STATUS.md", "guides/quickstart.md", # Core Concepts "guides/core_concepts.md", "guides/parallel_io.md", # Storage and Backends "guides/storage_providers.md", "guides/custom_storage_backend.md", # Compression and Data Processing "guides/compression_codecs.md", "guides/python_interop.md", # Advanced Topics "guides/performance.md", "guides/nx_integration.md", # Reference "guides/troubleshooting.md", "guides/glossary.md", # Contributing "guides/contributing.md", "guides/telemetry.md", "migration_guide_v1_1_0.md", "release_notes_v1_1_0.md", "ROADMAP.md", "docs/architecture_review.md", "docs/gap_analysis.md", "docs/v1_1_design.md", "docs/cloud_storage_patterns.md", "docs/cookbook/README.md", "docs/cookbook/100gb_arrays.md", "docs/cookbook/1tb_arrays.md", "docs/cookbook/image_archives.md", "docs/cookbook/ml_pipelines.md", "docs/cookbook/geospatial.md", "docs/cookbook/scientific_computing.md", "docs/cookbook/distributed.md", "docs/educational/v1_1_streaming_guide.md", # Additional Documentation "CHANGELOG.md", "INTEROPERABILITY.md", "LICENSE", "PERFORMANCE_IMPROVEMENTS.md", "SECURITY.md", "docs/V2_TO_V3_MIGRATION.md", "benchmarks/README.md" ], groups_for_extras: [ "Getting Started": [ "README.md", "guides/quickstart.md" ], "Core Concepts": [ "guides/core_concepts.md", "guides/parallel_io.md" ], "Storage and Backends": [ "guides/storage_providers.md", "guides/custom_storage_backend.md" ], "Compression and Data Processing": [ "guides/compression_codecs.md", "guides/python_interop.md" ], "Advanced Topics": [ "guides/performance.md", "guides/nx_integration.md" ], Reference: [ "guides/troubleshooting.md", "guides/glossary.md" ], Contributing: [ "guides/contributing.md" ], "v1.1 Streaming": [ "migration_guide_v1_1_0.md", "release_notes_v1_1_0.md", "docs/v1_1_design.md", "docs/cloud_storage_patterns.md", "docs/educational/v1_1_streaming_guide.md", "guides/telemetry.md" ], Cookbook: [ "docs/cookbook/README.md", "docs/cookbook/100gb_arrays.md", "docs/cookbook/1tb_arrays.md", "docs/cookbook/image_archives.md", "docs/cookbook/ml_pipelines.md", "docs/cookbook/geospatial.md", "docs/cookbook/scientific_computing.md", "docs/cookbook/distributed.md" ], "Additional Documentation": [ "CHANGELOG.md", "INTEROPERABILITY.md", "LICENSE", "PERFORMANCE_IMPROVEMENTS.md", "SECURITY.md", "docs/V2_TO_V3_MIGRATION.md", "benchmarks/README.md" ] ], source_ref: "v#{@version}", source_url: @source_url, authors: ["Thanos Vassilakis"], logo: nil, api_reference: true, formatters: ["html"], before_closing_body_tag: &before_closing_body_tag/1 ] end # Add search and navigation enhancements defp before_closing_body_tag(:html) do """ """ end defp before_closing_body_tag(_), do: "" end