Packages

macula

4.3.0
7.1.0 7.0.0 6.0.0 5.2.2 5.2.1 5.2.0 5.1.0 5.0.0 4.8.0 4.7.1 4.7.0 4.6.0 4.5.0 4.4.10 4.4.9 4.4.8 4.4.7 4.4.6 4.4.5 4.4.4 4.4.3 4.4.2 4.4.1 4.4.0 4.3.1 4.3.0 4.2.9 4.2.8 4.2.7 4.2.6 4.2.5 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.1 4.1.0 4.0.0 3.16.0 3.15.3 3.15.2 3.15.1 3.14.0 3.13.0 3.12.1 3.12.0 3.11.1 3.11.0 3.10.3 3.10.2 3.10.1 3.9.0 3.8.0 3.7.0 3.5.0 3.4.0 3.3.0 3.2.0 3.1.0 3.0.0 2.1.1 2.1.0 2.0.0 1.5.2 1.5.1 1.4.30 1.4.29 1.4.28 1.4.27 1.4.26 1.4.25 1.4.24 1.4.23 1.4.22 1.4.21 1.4.20 1.4.19 1.4.18 1.4.17 1.4.16 1.4.15 1.4.14 1.4.13 1.4.11 1.4.10 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.1 1.3.0 1.2.0 1.1.0 1.0.10 1.0.9 1.0.8 1.0.7 1.0.6 1.0.5 1.0.4 1.0.3 1.0.2 1.0.1 1.0.0 0.48.6 0.48.5 0.48.4 0.48.3 0.48.2 0.48.1 0.48.0 0.47.1 0.47.0 0.46.3 0.46.1 0.46.0 0.45.3 0.45.2 0.45.1 0.45.0 0.44.2 0.44.1 0.44.0 0.43.3 0.43.2 0.43.1 0.43.0 0.42.9 0.42.8 0.42.7 0.42.6 0.42.5 0.42.4 0.42.3 0.42.2 0.42.1 0.42.0 0.41.1 0.41.0 0.40.1 0.40.0 0.39.9 0.39.8 0.39.7 0.39.6 0.39.5 0.39.4 0.39.3 0.39.2 0.39.1 0.39.0 0.38.8 0.38.7 0.38.6 0.38.5 0.38.4 0.38.3 0.38.2 0.38.1 0.38.0 0.37.7 0.37.6 0.37.5 0.37.4 0.37.3 0.37.2 0.37.1 0.37.0 0.36.6 0.36.5 0.36.4 0.36.3 0.36.2 0.36.1 0.36.0 0.35.4 0.35.3 0.35.2 0.35.1 0.35.0 0.34.1 0.34.0 0.33.1 0.33.0 0.32.5 0.32.4 0.32.3 0.32.2 0.32.1 0.32.0 0.31.9 0.31.8 0.31.7 0.31.6 0.31.5 0.31.4 0.31.3 0.31.2 0.31.1 0.31.0 0.30.10 0.30.9 0.30.8 0.30.7 0.30.6 0.30.5 0.30.4 0.30.3 0.30.2 0.30.1 0.30.0 0.29.0 0.28.3 0.28.2 0.28.1 0.28.0 0.27.1 0.27.0 0.26.1 0.26.0 0.25.6 0.25.5 0.25.4 0.25.3 0.25.2 0.25.1 0.25.0 0.24.6 0.24.5 0.24.4 0.24.3 0.24.2 0.24.1 0.24.0 0.23.3 0.23.2 0.23.1 0.23.0 0.22.12 0.22.11 0.22.10 0.22.9 0.22.8 0.22.7 0.22.6 0.22.5 0.22.4 0.22.3 0.22.2 0.22.1 0.22.0 0.21.7 0.21.6 0.21.5 0.21.4 0.21.2 0.21.1 0.21.0 0.20.25 0.20.24 0.20.23 0.20.22 0.20.21 0.20.20 0.20.19 0.20.18 0.20.17 0.20.16 0.20.15 0.20.14 0.20.13 0.20.12 0.20.11 0.20.10 0.20.9 0.20.8 0.20.7 0.20.6 0.20.5 0.20.3 0.20.2 0.20.1 0.20.0 0.19.2 0.19.1 0.19.0 0.18.1 0.18.0 0.17.4 0.17.3 0.17.2 0.17.1 0.17.0 0.16.6 0.16.5 0.16.4 0.16.3 0.16.2 0.16.1 0.16.0 0.15.1 0.15.0 0.14.3 0.14.2 0.14.1 0.14.0 0.12.6 0.12.5 0.12.3 0.11.3 0.10.2 0.10.1 0.10.0 0.9.2 0.9.1 0.9.0 0.8.25 0.8.24 0.8.23 0.8.22 0.8.21 0.8.20 0.8.19 0.8.18 0.8.17 0.8.16 0.8.15 0.8.14 0.8.13 0.8.12 0.8.11 0.8.10 0.8.9 0.8.8 0.8.7 0.8.6 0.8.5 0.8.4 0.8.3 0.8.2 0.8.1 0.8.0 0.7.30 0.7.29 0.7.28 0.7.27 0.7.26 0.7.25 0.7.24 0.7.23 0.7.22 0.7.21 0.7.20 0.7.19 0.7.18 0.7.17 0.7.16 0.7.15 0.7.14 0.7.13 0.7.12 0.7.11 0.7.10 0.7.9 0.7.8 0.7.7 0.7.6 0.7.5 0.7.4 0.7.3 0.7.2 0.7.1 0.7.0 0.6.7 0.6.6 0.6.5 0.6.4 0.6.3 0.6.2 0.6.1 0.6.0 0.5.0 0.4.4 0.4.3 0.4.2 0.4.1 0.4.0 0.3.4 0.3.3 0.3.2 0.3.1

Macula HTTP/3 Mesh SDK — connect, subscribe, publish, call, advertise

Current section

Files

Jump to
macula rebar.config
Raw

rebar.config

%% -*- mode: erlang -*-
%% Macula HTTP/3 Mesh - Root Rebar3 Configuration
{erl_opts, [
debug_info,
warnings_as_errors,
warn_export_vars,
warn_unused_vars,
warn_obsolete_guard
]}.
%% Include subdirectories in src/ for compilation. Each slice
%% directory holds modules for a coherent capability — see
%% PLAN_V2_PARITY § 3 for the layout rationale. Foundational
%% primitives (macula_id, macula_realm, macula_topic, etc.) stay
%% flat at src/ root; capability slices live in subdirs.
{src_dirs, [
"src",
"src/auth",
"src/client",
"src/identity",
"src/macula_cert_system",
"src/macula_dist_system",
"src/macula_yggdrasil",
"src/mri",
"src/observability",
"src/peering",
"src/pubsub",
"src/record",
"src/v1",
%% macula-net L3 substrate (PLAN_MACULA_NET.md)
"src/derive_address",
"src/manage_tun_device",
"src/route_packet",
"src/deliver_packet",
"src/macula_net",
%% Phase 2 — DHT-backed station resolution.
"src/advertise_station",
"src/resolve_address",
"src/cache_route",
%% Phase 3 — hosted-identity gateway.
"src/host_identity",
"src/attach_identity",
"src/host_attach_controller"
]}.
{pre_hooks, [
{compile, "sh -c 'B=\"${REBAR_DEPS_DIR}/macula\"; [ -f \"$B/priv/build-nifs.sh\" ] || B=\".\"; sh \"$B/priv/build-nifs.sh\" \"$B\"'"}
]}.
{deps, [
%% QUIC transport: Quinn via Rust NIF (replaces quicer/MsQuic)
%% Built from native/macula_quic/ via cargo pre_hooks above
%% MessagePack serialization
%% (msgpack removed in v3.0.0 — wire protocol switched to CBOR
%% via macula_cbor / macula_cbor_nif Rust NIF.)
%% Process registry
{gproc, "0.9.1"},
%% mDNS local discovery (optional - hex.pm package)
{macula_mdns, "0.1.0"},
%% Telemetry for observability and metrics
{telemetry, "1.3.0"}
%% JSON encoding: Using built-in json module (OTP 27+)
%% Crypto, UCAN, DID, MRI NIFs: Built from native/ via Rust/Cargo
%% (absorbed from macula-nifs package in v1.0)
%% Falls back to pure Erlang when Rust toolchain not available
%% Note: Ra/Raft was removed in v0.14.0
%% Macula uses CRDTs (macula_crdt.erl) for masterless state management
%% See architecture/ROADMAP.md for details
]}.
{project_plugins, [
rebar3_hex,
rebar3_proper,
rebar3_ex_doc
]}.
%% Test configuration
{eunit_opts, [
verbose,
{dir, "test"},
{dir, "test/macula_dist_system"}
]}.
{cover_enabled, true}.
{cover_opts, [verbose]}.
{cover_excl_mods, []}. %% Modules to exclude from coverage (e.g., generated code)
{cover_print_enabled, true}.
{cover_export_enabled, true}.
{ct_opts, [
{sys_config, "config/test.sys.config"}
]}.
{dialyzer, [
{warnings, [
no_return,
no_unused,
no_improper_lists,
no_fun_app,
no_match,
no_opaque,
no_fail_call,
error_handling
]},
{plt_apps, top_level_deps},
%% macula_mdns: pulled in transitively but its modules are
%% referenced by macula_dist_discovery (mdns_advertise_sup,
%% mdns_advertise) — explicit listing teaches dialyzer about them.
{plt_extra_apps, [macula_mdns]},
{plt_location, local},
{base_plt_apps, [erts, kernel, stdlib, crypto, public_key, ssl]},
{base_plt_location, global}
]}.
%% Shell configuration
{shell, [
{apps, [macula]},
{config, "config/sys.config"}
]}.
%% Release configuration
{relx, [
{release, {macula, "3.0.0"}, [
macula,
sasl,
runtime_tools
%% observer - removed for headless deployments (requires wx/OpenGL)
]},
{mode, dev},
{include_erts, true},
{extended_start_script, true},
{sys_config, "./config/sys.config"},
{vm_args, "./config/vm.args"},
{overlay, [
{mkdir, "log"},
{mkdir, "data"},
{copy, "README.md", "README.md"},
{copy, "LICENSE", "LICENSE"}
]}
]}.
%% Profiles
{profiles, [
{test, [
{deps, [
{proper, "1.4.0"},
{meck, "0.9.2"}
]},
{erl_opts, [nowarn_export_all]},
{extra_src_dirs, [
"test",
"test/macula_dist_system",
"bench"
]}
]},
{prod, [
{erl_opts, [
no_debug_info,
deterministic
]},
{relx, [
{mode, prod},
{dev_mode, false},
{include_src, false}
]}
]},
{lint, [
{plugins, [
{rebar3_lint, "3.2.5"}
]}
]}
]}.
%% Documentation
{ex_doc, [
{extras, [
{"README.md", #{title => "Overview"}},
{"CHANGELOG.md", #{title => "Changelog"}},
%% CHANGELOG_LEGACY.md (pre-3.0) is shipped in the hex package
%% but intentionally NOT rendered in ex_doc — legacy entries
%% predate the 3.0 wire-format cutover and use EDoc-style
%% formatting that doesn't round-trip cleanly through ex_doc's
%% Markdown parser. View the raw file on Codeberg if you need
%% pre-3.0 history.
{"LICENSE", #{title => "License"}},
{"docs/GLOSSARY.md", #{title => "Glossary"}},
%% SDK Guides
{"docs/guides/CONNECTING_GUIDE.md", #{title => "Connecting"}},
{"docs/guides/PUBSUB_GUIDE.md", #{title => "PubSub Guide"}},
{"docs/guides/TOPIC_NAMING_GUIDE.md", #{title => "Topic Naming Convention"}},
{"docs/guides/RPC_GUIDE.md", #{title => "RPC Guide"}},
{"docs/guides/DIST_OVER_MESH_GUIDE.md", #{title => "Distribution Over Mesh"}},
{"docs/guides/CLUSTERING_GUIDE.md", #{title => "Clustering"}},
{"docs/guides/AUTHORIZATION_GUIDE.md", #{title => "Authorization (UCAN/DID)"}},
{"docs/guides/PROTOCOL_GATEKEEPER_GUIDE.md", #{title => "Protocol Gatekeeper"}},
{"docs/guides/MRI_GUIDE.md", #{title => "MRI (Resource Identifiers)"}},
{"docs/guides/DEVELOPMENT.md", #{title => "Development Guide"}},
{"docs/migrations/V1_TO_V2_PUBSUB.md", #{title => <<"Migration: V1 → V2 Pub/Sub"/utf8>>}},
{"docs/ROADMAP.md", #{title => "Roadmap"}}
]},
{main, "readme"},
{source_url, "https://codeberg.org/macula-io/macula"},
{assets, #{"assets" => "assets"}},
{logo, "artwork/logo.svg"},
{prefix_ref_vsn_with_v, false}
]}.
%% Hex package configuration
{hex, [
{doc, #{provider => ex_doc}},
{licenses, ["Apache-2.0"]},
{links, #{
<<"GitHub">> => <<"https://codeberg.org/macula-io/macula">>,
<<"Documentation">> => <<"https://hexdocs.pm/macula">>,
<<"Changelog">> => <<"https://codeberg.org/macula-io/macula/blob/main/CHANGELOG.md">>
}},
{description, "Macula HTTP/3 Mesh SDK — connect to relay mesh, pub/sub, RPC, Erlang distribution over QUIC, identity (Ed25519/UCAN/DID), MRI resource identifiers"},
{files, [
"src",
"include",
"priv",
"native/macula_quic/Cargo.toml",
"native/macula_quic/Cargo.lock",
"native/macula_quic/src",
"native/macula_crypto_nif/Cargo.toml",
"native/macula_crypto_nif/Cargo.lock",
"native/macula_crypto_nif/src",
"native/macula_ucan_nif/Cargo.toml",
"native/macula_ucan_nif/Cargo.lock",
"native/macula_ucan_nif/src",
"native/macula_did_nif/Cargo.toml",
"native/macula_did_nif/Cargo.lock",
"native/macula_did_nif/src",
"native/macula_mri_nif/Cargo.toml",
"native/macula_mri_nif/Cargo.lock",
"native/macula_mri_nif/src",
"rebar.config",
"README.md",
"CHANGELOG.md",
"LICENSE",
"CONTRIBUTING.md",
"CODE_OF_CONDUCT.md",
"assets",
"artwork",
"docs"
]}
]}.