Packages
phoenix_kit
1.7.153
1.7.208
1.7.207
1.7.206
1.7.205
1.7.204
1.7.203
1.7.202
1.7.201
1.7.200
1.7.199
1.7.198
1.7.197
1.7.196
1.7.194
1.7.193
1.7.192
1.7.191
1.7.190
1.7.189
1.7.187
1.7.186
1.7.185
1.7.184
1.7.183
1.7.182
1.7.181
1.7.180
1.7.179
1.7.178
1.7.177
1.7.176
1.7.175
1.7.174
1.7.173
1.7.172
1.7.171
1.7.170
1.7.169
1.7.168
1.7.167
1.7.166
1.7.165
1.7.164
1.7.162
1.7.161
1.7.160
1.7.159
1.7.157
1.7.156
1.7.155
1.7.154
1.7.153
1.7.152
1.7.151
1.7.150
1.7.149
1.7.146
1.7.145
1.7.144
1.7.143
1.7.138
1.7.133
1.7.132
1.7.131
1.7.130
1.7.128
1.7.126
1.7.125
1.7.121
1.7.120
1.7.119
1.7.118
1.7.117
1.7.116
1.7.115
1.7.114
1.7.113
1.7.112
1.7.111
1.7.110
1.7.109
1.7.108
1.7.107
1.7.106
1.7.105
1.7.104
1.7.103
1.7.102
1.7.101
1.7.100
1.7.99
1.7.98
1.7.97
1.7.96
1.7.95
1.7.94
1.7.93
1.7.92
1.7.91
1.7.90
1.7.89
1.7.88
1.7.87
1.7.86
1.7.85
1.7.84
1.7.83
1.7.82
1.7.81
1.7.80
1.7.79
1.7.78
1.7.77
1.7.76
1.7.75
1.7.74
1.7.71
1.7.70
1.7.69
1.7.66
1.7.65
1.7.64
1.7.63
1.7.62
1.7.61
1.7.59
1.7.58
1.7.57
1.7.56
1.7.55
1.7.54
1.7.53
1.7.52
1.7.51
1.7.49
1.7.44
1.7.43
1.7.42
1.7.41
1.7.39
1.7.38
1.7.37
1.7.36
1.7.34
1.7.33
1.7.31
1.7.30
1.7.29
1.7.28
1.7.27
1.7.26
1.7.25
1.7.24
1.7.23
1.7.22
1.7.21
1.7.20
1.7.19
1.7.18
1.7.17
1.7.16
1.7.15
1.7.14
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.20
1.6.19
1.6.18
1.6.17
1.6.16
1.6.15
1.6.14
1.6.13
1.6.12
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.5.2
1.5.1
1.5.0
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.10
1.2.9
1.2.8
1.2.7
1.2.5
1.2.4
1.2.2
1.2.1
1.2.0
1.1.0
1.0.0
A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more
Current section
Files
Jump to
Current section
Files
phoenix_kit
mix.exs
mix.exs
defmodule PhoenixKit.MixProject do
use Mix.Project
@version "1.7.153"
@description "A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more"
@source_url "https://github.com/BeamLabEU/phoenix_kit"
def project do
[
app: :phoenix_kit,
version: @version,
description: @description,
elixir: "~> 1.18",
elixirc_paths: elixirc_paths(Mix.env()),
start_permanent: Mix.env() == :prod,
deps: deps(),
# Hex package configuration
package: package(),
# Documentation
docs: docs(),
# Testing — Elixir 1.19's `mix test` uses these filters to pick
# which files to load as tests. Without them, `test/support/*.ex`
# files are flagged as orphaned and never run through the test
# loader, which leaves `test_helper.exs` looking up modules that
# were compiled but not loaded.
test_load_filters: [~r/_test\.exs$/],
test_ignore_filters: [~r{^test/support/}],
test_coverage: [tool: ExCoveralls],
# Aliases for development
aliases: aliases()
]
end
def cli do
[
preferred_envs: [
coveralls: :test,
"coveralls.detail": :test,
"coveralls.post": :test,
"coveralls.html": :test,
"test.setup": :test,
"test.reset": :test
],
# Dialyzer configuration
dialyzer: [
plt_file: {:no_warn, "priv/plts/dialyzer.plt"},
plt_add_apps: [:ex_unit],
ignore_warnings: ".dialyzer_ignore.exs",
# Exclude test files from Dialyzer analysis
list_unused_filters: true
],
# Aliases for development
aliases: aliases()
]
end
# Library configuration - no OTP application
# The parent Phoenix application will handle supervision
def application do
[
extra_applications: [:logger, :ecto, :postgrex, :crypto, :gettext],
mod: {PhoenixKit.Application, []}
]
end
# Specifies which paths to compile per environment
defp elixirc_paths(:test), do: ["lib", "test/support"]
defp elixirc_paths(_), do: ["lib"]
# Dependencies - minimal and focused on library functionality
defp deps do
[
# Database
{:ecto_sql, "~> 3.10"},
{:postgrex, "~> 0.22"},
# Phoenix web layer
{:phoenix, "~> 1.8.1"},
{:phoenix_ecto, "~> 4.6"},
{:phoenix_html, "~> 4.0"},
{:phoenix_live_view, "~> 1.1"},
# Web functionality
{:gettext, "~> 1.0"},
{:bandit, "~> 1.0"},
{:esbuild, "~> 0.8", only: :dev},
{:tailwind, "~> 0.4.1", only: :dev},
{:phoenix_live_reload, "~> 1.6.1", only: :dev},
# Authentication
{:bcrypt_elixir, "~> 3.0"},
{:swoosh, "~> 1.20"},
{:gen_smtp, "~> 1.2"},
# OAuth authentication
{:oauth2, "~> 2.0"},
{:ueberauth, "~> 0.10"},
{:ueberauth_google, "~> 0.12"},
{:ueberauth_apple, "~> 0.6"},
{:ueberauth_github, "~> 0.8"},
{:ueberauth_facebook, "~> 0.10"},
# Development and testing
{:ex_doc, "~> 0.39", only: :dev, runtime: false},
{:usage_rules, "~> 1.2", only: :dev, runtime: false},
{:excoveralls, "~> 0.18", only: :test},
{:credo, "~> 1.7", only: [:dev, :test], runtime: false},
{:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false},
{:mix_audit, "~> 2.1", only: [:dev, :test], runtime: false},
{:floki, ">= 0.30.0", only: :test},
{:lazy_html, ">= 0.1.0", only: :test},
{:hackney, "~> 1.16"},
# Content editor
{:leaf, "~> 0.2.23"},
# Pan-zoom image viewer + annotation overlay. Fresco 0.5 dropped
# OpenSeadragon and replaced the wrapped-OSD viewer with a
# hand-rolled CSS-transform engine; it also added <Fresco.canvas>
# (the layered scene with `extensions.etcher` for annotation data).
# Fresco 0.6 extracted `<Fresco.scroll_strip>` to a separate
# `fresco_strip` package — PhoenixKit doesn't use scroll_strip
# so no companion dep needed.
# Etcher 0.3 dropped its Ecto storage adapter and now persists
# annotations inside the canvas's extensions map — single bulk
# `etcher:annotations-changed` event, client-side UUIDv7. Etcher
# 0.5 added the public `revealShape` Promise + `shapeAt`
# hit-test API (deep-link / custom tap-zone integrations);
# PhoenixKit doesn't call those yet so the bump is pure
# additive. JS hooks ship in each lib's `priv/static/`; parent
# apps either import them directly in `app.js` or rely on the
# lazy-load wrappers in phoenix_kit.js (jsdelivr-pinned to the
# matching version).
# Tessera 0.3 was rewritten for Fresco's engine — a peer layer (like
# Etcher) that swaps raster resolutions on zoom and streams DZI tiles
# of the original for deep zoom on >4K images (no OpenSeadragon). The
# tile overlay rides Fresco's stage transform so it stays glued to the
# image. JS hooks lazy-load from jsdelivr pinned to the matching tag.
{:fresco, "~> 0.6"},
{:tessera, "~> 0.3"},
{:etcher, "~> 0.6.5"},
# Cloud provider regions
{:aws_regions, "~> 0.1.0"},
{:backblaze_regions, "~> 0.1.0"},
{:tigris_regions, "~> 0.1.0"},
# Utilities
{:jason, "~> 1.4"},
{:earmark, "~> 1.4"},
{:yaml_elixir, "~> 2.9"},
{:nimble_csv, "~> 1.2"},
{:uuidv7, "~> 1.0"},
{:oban, "~> 2.20"},
# Rate limiting (ETS backend is built into Hammer 6.x)
{:hammer, "~> 7.1"},
# DB Sync - WebSocket client for cross-site data sync
{:websockex, "~> 0.5.1"},
# AWS integration for emails
{:sweet_xml, "~> 0.7"},
{:ex_aws, "~> 2.4"},
{:ex_aws_sqs, "~> 3.4"},
{:ex_aws_sns, "~> 2.3"},
{:ex_aws_sts, "~> 2.3"},
{:ex_aws_s3, "~> 2.4"},
{:ex_aws_ec2, "~> 2.0"},
{:saxy, "~> 1.5"},
{:finch, "~> 0.18"},
# HTTP client for payment providers
{:req, "~> 0.5"},
# Code generation and project patching
# Note: Available in all environments for library code, but typically
# only needed in :dev when used as a dependency in parent projects
{:igniter, "~> 0.7"},
# Language and country data
{:beamlab_countries, "~> 1.0"}
]
end
# Package configuration for Hex.pm
defp package do
[
name: "phoenix_kit",
maintainers: ["BeamLab EU"],
licenses: ["MIT"],
links: %{"GitHub" => @source_url},
files: ~w(lib priv mix.exs README.md LICENSE CHANGELOG.md)
]
end
# Documentation configuration
defp docs do
[
name: "PhoenixKit",
source_ref: "v#{@version}",
source_url: @source_url,
main: "PhoenixKit",
extras: [
"README.md",
"CHANGELOG.md",
"guides/integration.md",
"guides/oauth-and-magic-link-setup.md",
"guides/aws-email-setup.md",
"guides/making-pages-live.md",
"guides/phk-publishing-format.md",
"guides/auth-header-integration.md",
"guides/draggable-list-component.md",
"guides/README.md",
"guides/custom-admin-pages.md",
"guides/per-module-i18n.md",
"lib/phoenix_kit/dashboard/ADMIN_README.md"
],
groups_for_extras: [
Guides: ~r/(guides\/.*|ADMIN_README)/
],
groups_for_modules: [],
# CHANGELOG is a historical record — entries cite functions/
# modules that may have since been renamed, made private, or
# extracted to another package (e.g. external Ecto modules
# referenced by code spans). Don't fail the docs build over
# stale historical references; module-level docs still get
# full reference checking.
skip_undefined_reference_warnings_on: ["CHANGELOG.md"]
]
end
# Development aliases
defp aliases do
[
setup: ["deps.get", "ecto.setup"],
"ecto.setup": ["ecto.create", "ecto.migrate"],
"ecto.reset": ["ecto.drop", "ecto.setup"],
# Test database management
"test.setup": ["ecto.create --quiet", "ecto.migrate --quiet"],
"test.reset": ["ecto.drop --quiet", "test.setup"],
# Code quality
quality: ["format", "credo --strict", "dialyzer"],
"quality.ci": ["format --check-formatted", "credo --strict", "dialyzer"],
precommit: [
"compile --warnings-as-errors --all-warnings",
"deps.unlock --check-unused",
"quality.ci"
],
# Release gate — run before `mix hex.publish`. Catches release-metadata
# drift and packaging mistakes that precommit/quality.ci structurally
# cannot. Deliberately DB-free (no `mix test` here — CI owns that).
prerelease: [
"deps.get --check-locked",
"deps.unlock --check-unused",
"cmd MIX_ENV=prod mix compile --force --warnings-as-errors",
"quality.ci",
"deps.audit",
"hex.audit",
"docs",
"hex.build",
"phoenix_kit.release_check"
]
]
end
end