あまりに3DSのプラグイン事情がややこしかったので、自分で理解するためにも一度整理しました。
間違っているかもしれません。
間違えていた場合、連絡してくださると幸いです。

拡張子

3gx

3ds Game eXtension の略です。
Luma3DS 3GX Loader を通して実行します。
配置場所は /luma/plugins/[TID]/plugin.3gx/luma/plugins/default.3gx です。
最終的には3gxtoolを通して読み込める形式に変換されます。
3GX自体のバージョンとして v1 と v2 があります。
このバージョン自体が意識されることはほとんどありません。
Luma 3DS 3GX Loader を通して実行します。
一度に使用できるプラグインは1つまでです。

plg

plugin の略です。 NTR CFW (BootNTR Selector) を通して実行します。
配置場所は /plugin/[TID]/plugin.plg です。
最新のバージョンでは Luma3DS 3GX Loader と共存できます。
プラグインによっては一度に複数のプラグインを使用できます。
現在ではほとんど使用されません。

プラグインの種類

XY式

拡張子は .plg です。
一度に複数読み込めるかは忘れました。
SELECT式と併用はできたような気がします。
X と Y を同時に押すことでメニューが開きます。
Speedflyのプラグインがこの形式です。 現在ではほとんど使用されません。
別名 v1 とも呼ばれます。

SELECT式

拡張子は .plg です。
SELECT式プラグインは一度に複数読み込むことができます。
記憶が曖昧ですが、3, 4つは同時に読み込めた気がします。 SELECTを押すことでメニューが開きます。
CTRPFが出る前は一番使われていた形式です。
現在ではほとんど使用されません。
別名 v2 とも呼ばれます。

CTRPF

先に言っておくと、これが一番ややこしいです。 ややこしすぎたので早見表を作りました。

3GXv1v2v2
Lumav9.1v10.1.3 ~ v12.0v10.1.3 ~ v12.0
libctrpfv0.5.1v0.6.0 ~ v0.7.3v0.7.4 ~
3gxtoolv0v1.0v1.1

(この表は3gx限定で、plg形式のCTRPFは考慮されていません)
Nanquitasが作成したプラグインを作成するためのフレームワークです。
現在はPabloMK7がメンテナンスしています。
また、それを使用して作成されたプラグインの総称でもあります。
拡張子は .plg.3gx の2つがあります。
CTRPFの中でも大きく分けて2種類あります。

plg世代

その他の .plg 形式のプラグインと同じようにNTRを通して読み込みます。

追記: みなとさんより情報をいただきました!
Luma 3GX Loader 以前に Luma Plugin Loader が存在していた
Luma Plugin Loader の最初期は .3gx ではなく .plg を読み込んでいた
読み込めるのはLoaderに対応しているCTRPFだけ
Lumaから読み込む .plg 形式のCTRPFもあったようです!👀

配置場所は /plugin/[TID]/plugin.plg です。
多分SELECT式と併用できた気がします。
ただし、CTRPFとは併用できなかった気がします。
記憶が曖昧なので当てにしないでください。
plg世代の途中までフリチ (FreeCheat) が搭載されいて、途中から ActionReplay に変わった記憶があります。
現在ではほとんど使用されません。

3gx世代

3gx世代でも、大きく分けると2つあります。
違いはLuma 3GX Loaderのバージョンです。

3GX v1

使用するLuma 3GX Loaderのバージョンは v9.1 です。
出回っているほとんどのプラグインがこの 3GX v1 です。
こう聞くとわかりにくいのですが、CTRPFのバージョンが v0.5.1 のプラグインです。
3GXバージョンは v1 で、シンボル情報保存などの仕様がありません。
作成するのに使用する3gxtoolのバージョンはありません。
バージョンがないだけで、存在はします。
0.5.1用の3gxtoolバージョンを僕は勝手に v0 と呼んでいます。
目にする範囲では “0.5.1用 3gxtool” などと呼ばれています。

3GX v2

使用するLuma 3GX Loaderのバージョンは v10.1.3 ~ v12.0 です。
3GX v2に移行すると同時に、CTRPF v0.6.0 がリリースされました。
3GX v2に対応するlibctrpfバージョンは v0.6.0 ~ です。
3GX v2の中で覚えておきたいのが3gxtool事件 (勝手にそう呼んでる) です。
3GX v2移行初期ではバージョンなしの3GX v2用3gxtoolが使用されていました。
この3gxtoolでは、プラグインが1MiBを超えるとビルドができないようになっていました。
Vapecordの作者でもあるLukasが3gxtoolをリバースエンジニアリングしてこの制限を解除したものを配布しました。
この事件で3GX v2の3gxtool事情が一時期カオスなことになっていました。
これは、libctrpf v0.7.3リリース、CTRPFがOSS化された時に3gxtool v1.0が公開されて解決しました。

libctrpf v0.6.0 ~ v0.7.3
3GXバージョンはv2で、3gxtoolのバージョンが途中 (libctrpf v0.7.3 のリリースと同時) から v1.0 になりました。
すべて割と最近リリースされました。
音声再生、不具合の修正、ディレクトリ構造の変更 などさまざまな更新がありました。

libctrpf v0.7.4 ~
Citra 上で3GX Loaderを使用できるようになりました。
3GXバージョンは変わらずv2で、3gxtoolのバージョンがv1.1になりました。
2023年 2月 23日 の時点ではこの libctrpf v0.7.4 が最新です。
このバージョンのリリース後にlibctrpfがパッケージマネージャで管理されるようになりました。

結局何を使えばいいのか

推奨構成:

  • Luma 3GX Loader v12.0
  • 3gxtool v1.1
  • libctrpf v0.7.4

この構成で作成すれば大丈夫です。
ただし、一部のゲームではアドレスが変わるため、v0.5.1がいまだに使用されています。
v0.5.1のビルドはさまざまな汚い技 (devkitARMのダウングレード) などが強制されるため、推奨しません。
どうしても v0.5.1 をビルドしたい人は自分で頑張るしかないです。
これらのバージョンの移行は非常に面倒なので慎重に考えたほうがいいです。
上の推奨構成を使用することを強くオススメします。

よくある間違い

正しい情報: CTRPF と 3gx は違う

CTRPFは3gx の一種です。 3gxは3DSのゲームを拡張するためのものです。
CTRPFは3gxをより扱いやすくするためのフレームワークです。 しかし、CTRPFを使用せずに3gxが作成されることはほとんどありません。
実際に、出回っている3gxのほとんどがCTRPFを使用して作成されています。
そこまで気にする必要はありませんが、同じものではありません。

おわりに

以上、ややこしすぎる3DSプラグイン事情でした。
実際にはもっと細かいと思います。