forked from tribes/tribes-plugin-template
4b7fe1b9ed27a7a93b9c7d91d188e88fba581663
Aether
aether is an external Tribes plugin that provides the aether@1
capability.
Getting Started
Install deps and run the test suite:
mix deps.get
mix test
Development
For local development alongside a Tribes checkout:
# Symlink into the host plugins directory once
cd /path/to/tribes
ln -s /path/to/tribes-plugin-aether plugins/aether
# Start the Tribes dev server
iex --sname dev -S mix phx.server
Then edit aether in its own repo. In development, the Tribes host watches
symlinked external plugins and automatically:
- runs
mix compilefor Elixir, HEEx, manifest, and migration changes - runs
npm run build --prefix assets - reloads the plugin in the running Tribes VM
- triggers a Phoenix browser reload after the rebuild finishes
That means the normal loop is:
cd /path/to/tribes-plugin-aether
mix deps.get
mix test
# in another terminal
cd /path/to/tribes
iex --sname dev -S mix phx.server
Project Structure
aether/
├── manifest.json
├── mix.exs
├── lib/
│ ├── aether/
│ │ ├── application.ex
│ │ └── plugin.ex
│ └── aether_web/
│ └── live/
├── assets/
│ ├── css/aether.css
│ ├── js/aether.js
│ ├── package.json
│ └── package-lock.json
├── priv/
└── test/
Manifest
manifest.json declares the plugin contract:
{
"name": "aether",
"version": "0.1.0",
"entry_module": "Tribes.Plugins.Aether.Plugin",
"host_api": "1",
"otp_app": "aether",
"provides": ["aether@1"],
"requires": ["ecto@1", "phoenix@1"],
"enhances_with": [],
"assets": {
"global_js": ["aether.js"],
"global_css": ["aether.css"]
}
}
See the host plugin docs in PLUGINS.md for the full manifest and runtime contract.
Building for Release
MIX_ENV=prod mix compile
npm run build --prefix assets
Guix packaging assembles the plugin artifact from the compiled BEAM output,
priv/, and manifest.json. Enable it from the guix-tribes channel-side node
configuration.
Description
Languages
Elixir
91.6%
Shell
3.6%
Nix
2.2%
Scheme
1.9%
JavaScript
0.5%
Other
0.2%