Skip to content

シングルファイルのパブリックドメイン/オープンソースライブラリで、最小限の依存性

私は、多数のシングルファイルC/C++パブリックドメインライブラリの作者です。 このようなライブラリを書いているのは私だけではないので、以下に他の類似のライブラリを紹介します。

一般的に以下はCやC++から使用可能で、32ビットと64ビットの両方のプラットフォームでコンパイルできる、小さく、統合しやすい、移植可能なライブラリのリストです。しかし私は、特定のライブラリが宣伝どおりであるかどうか、高品質のソフトウェアであるかどうか、個人的に検証したわけではありません。

ルール

  • CまたはC++から利用可能なライブラリであること(理想は両方)。
  • 複数のプラットフォームで利用可能であること (理想的には、すべての主要なデスクトップおよび/またはすべての主要なモバイル)
  • ライブラリは32ビットと64ビットの両方のプラットフォームでコンパイルでき、動作すること。
  • ライブラリは最大でも2つのファイル(ヘッダーとソース)を使用すること。

正当な理由がある場合は例外を認めます。

最近の追加情報

最近追加されたものには、左列にアスタリスクが付けられています。

新しいライブラリと訂正

リストの後にあるディスカッションをご覧ください。

JSONパース

ここには多くのJSONパーサーがリストアップされています。いくつかの解析とパフォーマンス結果についてはhttps://github.com/miloyip/nativejson-benchmarkをご覧ください。

その他のリスト

また関連する別のリストにも興味があるかもしれません。

  • clib: コンパクトな単一のC関数リスト (ライセンスはリストアップされていません)
  • CCAN: 共有可能なC関数のパッケージ (混合ライセンス)

ライブラリのリスト

CおよびC++から利用可能なパブリックドメインのシングルファイルライブラリは太字で表示されています。 その他のライブラリは、パブリックドメインでないか、2ファイルであるか、CとC++の両方から使えないか、3つとも使えないかのいずれかです。2ファイル以上のライブラリは、ほとんど禁止されています。

API欄では"C"はCのみ、"C++"はC++のみ、"C/C++"はどちらからでも使えるC/C++を意味します。いくつかのファイルはCまたはC++としてビルドする必要がありますが、ヘッダーファイルが動作するように extern "C" を使っていれば"C/C++"として適格です。(場合によっては、ヘッダーファイルのみのライブラリはCまたはC++としてコンパイルされますが、extern "C"が使用されていないため、どちらか一方からしか呼び出せない実装を生成します。この場合、ほとんどのユーザーにとって障害とならないため、表はまだそれをC/C++として修飾します)

カテゴリー:

AI

librarylicenseAPIfilesdescription
GenannzlibC/C++2シンプルニューラルネットワーク (ANN)
KANNMITC/C++2自動微分 (2ファイル)
micropatherzlibC++2* でパスファインディング

argv

librarylicenseAPIfilesdescription
Argh!BSDC++1コマンドライン引数解析
ClaraBoostC++1C++ 11 以降に対応したコマンドラインパーサ。
CLI11BSDC++1モダンなC++11で機能豊富なCLI構文解析を実現
cmdlineBSDC++1コマンドライン引数解析
flagspublic domainC++1コマンドライン引数解析
kgflagsMITC/C++1コマンドライン引数解析
linkomMITC/C++1コマンドライン引数解析 w/ DOS風オプション
optionparserMITC++1コマンドライン引数解析
pargpublic domainC2コマンドライン引数解析
ProgramOptions.hxxMITC++1コマンドライン引数解析

audio

librarylicenseAPIfilesdescription
aw_ima.hMITC/C++1IMA-ADPCM オーディオデコーダ
btac1cMITC/C++1MS-IMA_ADPCM バリアント
dr_flacpublic domainC/C++1FLACオーディオデコーダー
dr_wavpublic domainC/C++1WAVオーディオローダー
GenevaMITC/C++1各種8ビット波形を生成するライブラリ
minimp3CC0C1sse/neonをサポートするミニマルなMP3デコーダ
miniaudiopublic domainC/C++1オーディオ再生・キャプチャライブラリ
pocketmodMITC/C++1ProTracker MODファイルレンダラー
sts_mixerpublic domainC/C++1簡易ステレオオーディオミキサー
tinysoundzlibC/C++1ダイレクトサウンドオーディオミキサー&WAVローダー
TinySoundFontMITC/C++1SoundFont2 ローダー&シンセサイザー

圧縮

librarylicenseAPIfilesdescription
dmc_unrarGPLv2+C/C++1RARファイルの解凍
fastlzMITC/C++2高速だが大きなLZ圧縮
lz4BSDC/C++2高速だが大きなLZ圧縮
miniz.cMITC/C++1圧縮、解凍、ZIPファイル、PNG書き込み
microtarMITC/C++2軽量tarライブラリ
pithyBSDC/C++2高速だが大きなLZ圧縮

暗号

librarylicenseAPIfilesdescription
Monocypherpublic domainC2高品質な小型暗号ライブラリ
TweetNaClpublic domainC2高品質な小型暗号ライブラリ

データ構造

librarylicenseAPIfilesdescription
avlpublic domainC/C++2AVLツリー
c-bool-valueWTFPLv2C/C++1標準C言語によるシンプルで簡単なブーリアン値
chobo-shlMITC++1C++11標準のライブラリやヘルパーのようなもの。
DG_dynarr.hpublic domainC/C++1プレーン C のためのタイプセーフな動的配列 (std::vector のような)
DynaVarGPL-3.0C++1任意の種類のプリミティブデータ型を格納することができるオブジェクト
klibMITC/C++2多くの 2 ファイルライブラリ: ハッシュ、ソート、Bツリー、その他
libpqueueBSDC/C++2優先順位待ち行列(ヒープ)
minilibspublic domainC22ファイルバイナリートレス (also regex, etc)
PackedArrayWTFPLv2C2非Pow2ビット数でメモリ効率の良い要素配列
simclistBSDC/C++2リンクつきリスト
selistISCC/C++2スペース効率に優れたリンクリスト
mempoolMITC++1C++の効率的な最小メモリプール実装
uthashBSDC/C++21ヘッダ、1ライセンスファイルのライブラリ: 汎用ハッシュ、リスト、その他

デバッグ

librarylicenseAPIfilesdescription
dbgtoolszlibC/C++2クロスプラットフォームデバッグユーティリティライブラリ
debug-assertzlibC++1モジュール式アサーションマクロ
debugbreakBSDC/C++1プログラムデバッグブレーク
logurupublic domainC++1フレキシブルロギング
pempek_assert.cppWTFPLv2C++2フレキシブルアサーション

ファイルおよびファイル名

librarylicenseAPIfilesdescription
DG_misc.hpublic domainC/C++1Daniel Gibson の stb.h 風のクロスプラットフォームヘルパー: path/file、文字列
direntMITC/C++1dirent for Windows: ファイルとディレクトリの情報を取得します。
tfileMITC++1FILE* ラッパーが read-write-append-seek-close を行う (Win/Mac/Unix)
TinyDirBSDC1クロスプラットフォームでのディレクトリ読み込み(Win/POSIX/MinGW)
tinyfileszlibC/C++1クロスプラットフォームでのディレクトリ読み込み(Win/Mac/Unix)
whereamiWTFPLv2C/C++2実行ファイルやモジュールのパスやファイル名を取得する。

ジオメトリファイル

librarylicenseAPIfilesdescription
cgltfMITC1glTF 2.0 ファイルローダー
fast_obj.hMITC1wavefront OBJ ファイルローダー
objzeroMITC2wavefront OBJ ファイルローダー
tinyplypublic domainC++2PLY メッシュファイルローダ
tinyobjloaderMITC++1wavefront OBJ ファイルローダー
tinyobjloader-cMITC1wavefront OBJ ファイルローダー
tk_objfileMITC/C++1OBJ ファイルローダー
yocto_obj.hMITC/C++1wavefront OBJ ファイルローダー

幾何学数学

librarylicenseAPIfilesdescription
ClipperBoostC++2ライン・ポリゴンのクリッピングとオフセット
dfpublic domainC/C++1ボロノイ領域を格子の大きさの線形時間で見つける。
jc_voronoiMITC/C++1float/double データからボロノイ領域を探す
nanoflannBSDC++1点群のKDツリーを構築する
nv_voronoi.hpublic domainC/C++1整数入力の格子上のボロノイ領域の探索
par_msquaresMITC/C++1二値化された画像を三角形に変換する
par_shapesMITC/C++1様々な3次元幾何学形状を生成
PolyPartitionMITC++2ポリゴンの三角形分割、パーティショニング
rjm_mc.hpublic domainC/C++1マーチングキューブ三角測量機
sobol.hpublic domainC/C++1ソボルと層別サンプリングシーケンス
sdf.hMITC/C++1アンチエイリアス画像から符号付き距離フィールドを計算する
Tomas Akenine-Moller snippetspublic domainC/C++2様々な3D交差点計算、lib化されていない
VoxelizerMITC/C++1三角形メッシュをボクセル三角形メッシュに変換する
xatlasMITC++2メッシュパラメタリゼーション
yocto_bvh.hMITC/C++1線型キャストと境界ボリューム階層の最も近い要素クエリ
yocto_shape.hMITC/C++1シェイプ生成、テッセレーション、法線など。

グラフィック(テキスト)

librarylicenseAPIfilesdescription
rangpublic domainC++1クロスプラットフォーム・カラーコンソールテキスト

グラフィクス (2d)

librarylicenseAPIfilesdescription
blendishMITC/C++1NanoVGを使ったブレンダースタイルウィジェットレンダリング
CimgCeCILL/CeCILL-CC++1画像処理ツールキット(60K LoC)
Immediate2Dpublic domainC++2Windows用ゼロコンフィギュレーション、イミディエイトモード2Dグラフィックス
noc_turtleMITC/C++2手続き型グラフィックスジェネレータ
tigrpublic domainC/C++2WindowsとmacOSのためのクイック&ダーティなウィンドウテキスト/グラフィックス

グラフィクス (3d)

librarylicenseAPIfilesdescription
debug-drawpublic domainC++1APIにとらわれない即時モードデバッグレンダリング
lightmapperpublic domainC/C++1OpenGLレンダラを使ってオフラインでライトマップを焼く
mikktspacezlibC/C++2法線マッピングのための接線空間を計算する
rjm_raytrace.hpublic domainC/C++1オフラインベーキングのための最小限のSSEパケットレイトレーサー
seamoptimizerpublic domainC/C++1ライトマップデータを修正して継ぎ目を隠す
sokol_gfx.hMITC/C++1クロスプラットフォーム 3D API ラッパー (GLES2+3/GL3/D3D11/Metal)
Swarmzpublic domainC++1スウォーミング/フロッキングアルゴリズム
tinygizmopublic domainC++23D変換をインタラクティブに編集するためのギズモオブジェクト
Vertex Cache Optimizerpublic domainC/C++1メッシュの頂点キャッシュ最適化
Vulkan Memory AllocatorMITC/C++1Vulkan用メモリアロケータ
yocto_trace.hMITC/C++1物理ベース単方向パストレーサー(ダイレクトライト用MIS付き
yocto_symrigid.hMITC/C++1剛体シミュレータ(逐次インパルス/PGS)、凹型オブジェクト対応

ハード

librarylicenseAPIfilesdescription
EasyTabpublic domainC/C++1マルチプラットフォーム・タブレット入力
libueMITC/C++1Linuxデバイスのホットプラグアイベント用ヘルパーライブラリ

ハッシュ化

librarylicenseAPIfilesdescription
xxHashBSDC/C++2高速ハッシュ関数

画像

librarylicenseAPIfilesdescription
EXR miniexrpublic domainC++2OpenEXRライター、ヘッダーファイルが必要
EXR tinyexrBSDC/C++1EXRイメージの読み込み/書き込み、内部でminizを使用
GIF gif.hpublic domainC++1アニメーションGIFライター(1回のみ搭載可能)
GIF gif_loadpublic domainC/C++1(アニメーション) GIFリーダー
GIF jo_gif.cpppublic domainC++1アニメーションGIFライター(CPPファイルはHファイルとしても使用可)
JPG jpeg-compressorpublic domainC++22ファイルJPEG圧縮、2ファイルJPEG伸張
JPG NanoJPEGMITC/C++1JPEGデコーダ
JPG tiny_jpeg.hpublic domainC/C++1JPEGエンコーダ
JPG EXIF easyexifMITC++2JPEG画像用EXIFメタデータ抽出ツール
JPG EXIF TinyEXIFBSDC++2JPEG (XMP w/ TinyXML2 lib) からの EXIF データのパース
PDF PDFgenpublic domainC2PDFライター
PNG lodepngzlibC/C++2PNGエンコーダー/デコーダー
PNG picopng.cppzlibC++2ちっちゃなPNGローダー
PNG TinyPngOutputLGPLv3C/C++2PNGライター
PNM PNMApache 2.0C++1PBM、PGM、PPMのリーダ/ライタ
SVG nanoSVGzlibC/C++11ファイルSVGパーサ、1ファイルSVGラスタライザ
cro_mipmap.hpublic domainC/C++1平均、最小、最大ミップマップジェネレータ
rjm_texbleed.hpublic domainC/C++1alpha=0となる画素の色を塗りつぶす。

数学

librarylicenseAPIfilesdescription
amoebaMITC/C++1制約ソルバー(Cassowary)、Luaバインディング付き
fftpublic domainC++1高速フーリエ変換
PoissonGenerator.hMITC++1ポアソン円盤点生成器(円盤または矩形)
prns.hpublic domainC/C++1シーク可能な擬似乱数列
rnd.hpublic domainC/C++1擬似乱数生成
ShaderFastLibsMITC++1(HLSLでも) シェーダ用に最適化された近似超越関数 (特にGCN)
simrank.hppMITC++2SimRankグラフ類似性アルゴリズム
SummedAreaTableMITC++1Summed-Area Tableの生成とsum/avgクエリ
TinyExprzlibC2文字列から数式を評価する

マルチスレッド

librarylicenseAPIfilesdescription
bikeshed.hMITC/C++1クロスプラットフォーム ロックフリー 固定メモリ 階層型作業スケジューラ
mm_sched.hzlibC/C++1enkiTS をベースとしたクロスプラットフォームなマルチスレッドタスクスケジューラ。
thread.hpublic domainC/C++1クロスプラットフォーム・スレッドプリミティブ
TinyCThreadzlibC/C++2C11 Threads API のクロスプラットフォーム実装
TinyThread++zlibC++2C++11 Threads API のクロスプラットフォーム実装

ネットワーク

librarylicenseAPIfilesdescription
civetwebMITC/C++2HTTP サーバ、Mongoose のフォーク
EWSBSDC/C++1HTTPサーバー
happyhttpzlibC++2HTTPクライアントリクエスト
httppublic domainC/C++1HTTP get/post
libcluonMPL-2.0C++1Protobuf, LCM/ZCM, JSON, MsgPack のシリアライズ/デシリアライズをネイティブ実装したクロスプラットフォームのソケットラッパーとデータマーシャリング。
LUrlParserMITC++2軽量URL・URIパーサ RFC 1738, RFC 3986
mm_web.hBSDC/C++1軽量ウェブサーバ、webby のフォーク
mongooseGPLv2C/C++2HTTPサーバー
par_easycurl.hMITC/C++1cURL ラッパー
sts_netpublic domainC/C++1クロスプラットフォームソケットラッパー(ソケットセット、パケットAPI)
yoctopublic domainC/C++2非プロダクションユースのHTTPサーバー
zed_netpublic domainC/C++1クロスプラットフォームソケットラッパー
znetMITC/C++1Luaバインディングによるクロスプラットフォームネットワーキング

シリアライズ

librarylicenseAPIfilesdescription
archivepublic domainC++1STLサポートによるバイナリー・シリアライズとデシリアライズ
libcluonMPL-2.0C++1Protobuf, LCM/ZCM, JSON, MsgPack のネイティブ実装によるクロスプラットフォームなデータシリアライズ/デシリアライゼーション。

json

librarylicenseAPIfilesdescription
ajsonBoostC++1JSONのシリアライズとデシリアライズ、STLのサポート
cJSONMITC/C++1JSONパーサー
json.hpublic domainC/C++2JSONパーサー
json.hppMITC++1JSONのパース、シリアライズ、デシリアライズ
jzon.hMITC++2JSONパーサー
PicoJSONBSDC++1JSONパース/シリアライザ
parsonMITC/C++2JSONパーサーとシリアライザー

yaml

librarylicenseAPIfilesdescription
mini-yamlMITC++2YAML パーサーとシリアライザー

csv

librarylicenseAPIfilesdescription
CSVstreamMITC++1CSVパーサー
Fast C++ CSV ParserBSDC++1CSVパーサー
RapidcsvBSDC++1CSVパーサー
Vince's CSV ParserMITC++1CSVパーサおよびシリアライザ

パーサー

librarylicenseAPIfilesdescription
cmpMITC/C++2MessagePack パーサおよびシリアライザ
inihBSDC/C++2.iniファイルパーサ
ini.hpublic domainC/C++1.iniファイルパーサ
minilibspublic domainC22ファイル正規表現
mm_lexer.hzlibC/C++1C言語風言語レキサー
SLREGPLv2C/C++1正規表現マッチャー
tinymemfilezlibC++1インメモリファイルのfscanf

プロファイリング

librarylicenseAPIfilesdescription
MicroProfilepublic domainC++2-4CPU(とGPU?)プロファイラ、1-3ヘッダファイル、内部でminizを使用。
profMITC/C++1Linux用プロファイラ
RemoteryApache 2.0C/C++2CPU/GPUプロファイラ Win/Mac/Linux、ビューワはWebブラウザを使用。

スクリプト

librarylicenseAPIfilesdescription
DuktapeMITC2埋め込み型JavaScriptエンジン
MY-BASICMITC2BASIC方言のスクリプト言語用インタプリタ
LILzlibC/C++2Tcl ライクなスクリプト言語用インタプリタ
lualiteMITC++1C++でLuaバインディングを生成
PicolBSDC/C++1Tcl ライクなスクリプト言語用インタプリタ
s7BSDC/C++2Schemeのサブセット(R5RS/R7RS)用のインタプリタです。

文字列

librarylicenseAPIfilesdescription
dfaMITC/C++2高速 UTF-8 デコーダ (ヘッダファイルが必要)
DG_misc.hpublic domainC/C++1Daniel Gibson の stb.h 風のクロスプラットフォームヘルパー: path/file、文字列
gb_string.hpublic domainC/C++1動的文字列
Obfuscatepublic domainC++1C++14用コンパイル保証型文字列リテラル難読化ライブラリ
inja.hppMITC++1テンプレートエンジン
strpool.hpublic domainC/C++1文字列インターン
str_view.hppMITC++1null-termination-aware string-view class
utf8public domainC/C++1UTF-8文字列ライブラリ

ユニットテスト

librarylicenseAPIfilesdescription
catchBoostC++1ユニットテスト
catch2BoostC++1ユニットテスト
doctestMITC++1ユニットテスト
fctxBSDC/C++1ユニットテスト
greatestiSCC1ユニットテスト
hippomocksLGPLC++1ユニットテスト
labratpublic domainC/C++1ユニットテスト
minctestzlibC1ユニットテスト
munitMITC1ユニットテスト
SPUTBSDC/C++1ユニットテスト
trompeloeilBoostC++1ユニットテスト
utestMITC/C++1ユニットテスト
utest.hpublic domainC/C++1ユニットテスト

ユーザーインターフェース

librarylicenseAPIfilesdescription
dear imguiMITC++9以前は "ImGui" と呼ばれていた即時モードGUI。; サードパーティ製C言語ラッパー
libcmdfpublic domainC1CLI アプリケーションを書くための小さなライブラリ
linenoiseBSDC/C++2ターミナルの読み出しと履歴など
noc_file_dialog.hMITC/C++1ファイルを開く/保存するダイアログ(Win/Mac/Linux)
nuklearpublic domainC/C++1最小限のGUIツールキット
tinyfiledialogsZLIBC/C++2モーダルダイアログ、ファイルオープン/セーブ (Win/Mac/Linux)
wcwidth9Apache 2.0C1プラットフォーム非依存の wcwidth で unicode 9 を完全サポート

ベクトル

librarylicenseAPIfilesdescription
algebra3.hpublic domainC++12、3、4 要素ベクトル用ベクトルユーティリティ(すべてインライン化
ccVector.hpublic domainC/C++1ベクトル、クォータニオン、行列の計算
gb_mathpublic domainC/C++1ベクトル、四元数、行列の計算をmath.hなしで行う。
Handmade Mathpublic domainC/C++1ベクトル数学
linalg.hpublic domainC++1ベクトル/マトリックス/クォータニオン数学
linalgISCC/C++1ベクトル/マトリックス/クォータニオン数学
mm_vec.hBSDC/C++1SIMDベクトル演算

ビデオ

librarylicenseAPIfilesdescription
jo_mpegpublic domainC++1MPEGファイルライター

ビデオゲーム

librarylicenseAPIfilesdescription
app.hpublic domainC/C++1Windows専用だが、クロスプラットフォームのゲーム的なフレームワークであること。

雑多

librarylicenseAPIfilesdescription
ASAPMITC++1日付の解析、印刷、反復処理、操作を行うためのライブラリです。
cpp-generatorsBSDC++1C++のジェネレータ
Hedleypublic domainC/C++1コンパイラの移植性、最適化、静的解析など。
levenshteinMITC/C++22つの文字列間の編集距離を計算する
MakeID.hpublic domainC++1小さな整数IDを効率的に割り当て/解放する。
picobenchMITC++1マイクロベンチマーキング
PlusCallbackzlibC++1関数/メソッドコールバック
process.hpublic domainC/C++1プロセスコントロールAPI
randomMITC++1乱数のための便利なAPI
sokol_time.hMITC/C++1クロスプラットフォームでの時間計測
stmrMITC2英単語の語幹を抽出する
tinyformatBoostC++1タイプセーフprintf
tinytimezlibC/C++1クイック&ダーティタイム経過時間
visit_structBoostC++2struct-field reflection

このようなXMLライブラリもありますが、私はXMLが著しく苦手なので、よく考えてもらうために一番下に記しました。

  • パース: tinyxml2: XML (zlib license)
  • パース: pugixml: XML (MIT license)
  • パース: yxml: XML (MIT license)

新しいライブラリと訂正

新しいライブラリの投稿課題として、またはプルリクエストとして提出することができます。ヘッダーファイルとソースファイルは2ファイルですが、ヘッダーファイル、ソースファイル、LICENSE(ライセンスがソースファイルにない場合)は3ファイルとなり、2ファイルではないので受け入れられませんのでご注意ください。しかし、実際には「LICENSE」はライブラリだけにスコープされているわけではないので、いずれにせよソースツリーにライブラリをドロップするだけでは問題です。したがって、ライブラリ作者は、ライセンスをソースファイルに含め、別にLICENSEを要求しないことが推奨されています。

訂正:上記のライブラリの情報が間違っている場合、issue、pull request、またはe-mailで訂正をお送りください。なお、このリストでC/C++の両方から動作するとされているライブラリが、そうでない場合、これはリストの誤りか、ライブラリのバグである可能性があります。あるライブラリが32ビットまたは64ビットで動作しないことがわかった場合、そのライブラリのバグでない限り、そのライブラリはこのリストから削除されるべきです。

リストFAQ

このリストに直接リンクすることはできますか?

はい。 このリンクが優先されます。

3つ以上のファイルから構成されるライブラリXXXは、なぜこのリストにないのですか?

私は任意に最大2ファイルまでと線引きしています。(2つのファイルに見えるライブラリの中には、別のLICENSEファイルを必要とするものがあり、それを除外していることに注意してください)。これらのライブラリの中には、プロジェクトにドロップしてビルドするのが簡単なものもありますから、それでも構わないかもしれません。しかし、stbに来る人は、シングルファイルのパブリックドメインライブラリを求めているので、私たちがここでやっていることから離れすぎているような気がするのです。

なぜ、最大で2つのファイルからなり、他の依存関係が最小のライブラリXXXがこのリストにないのでしょうか?

おそらく私が知らないからだと思いますが、プルリクエスト、イシュー、メール、ツイートでお気軽にお寄せください(あなた自身のライブラリでも他の人のライブラリでもかまいません)。しかし、「他の依存関係が最小限」であることや「軽量」であることなど、他のさまざまな理由から、私はそれを含めないかもしれません。

なぜSQLiteのamalgamated buildはこのリストにないのですか?

さあ?