= GPGME - the API to GnuPG The recommended way to use the ~GnuPG crypto stack from your application is ~G~PGME, which is written in C. Here is the [[https://www.gnupg.org/documentation/manuals/gpgme/|online version of the manual]]. A number of ~G~PGME bindings for other programming languages/environments exist (Please point us to missing entries or corrections or add them directly in the wiki.): == All / C == * [[https://www.gnupg.org/gpgme.html|gpgme]] (~GPG Made Easy) is the official GnuPG API. It is implemented in C itself, but this is what you should use from your language as well. === official GPGME bindings Coming with official [[https://gnupg.org/software/gpgme/index.html|GPGME releases]] are bindings for: * **C++**: Based upon the code previously maintained by KDE. * **Qt**: Based upon the code previously maintained by KDE. * **Python**: Based upon the 'pyme' bindings, should be backwards compatible. * **Common Lisp** The current development versions can be found at [[https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gpgme.git;a=tree;f=lang|git.gnupg.org gpgme/lang]]. The GnuPG-Team supports these bindings. === Examples for how to use the bindings * https://gitlab.com/reiterl/python3-gpg-examples (Python) * https://heptapod.host/intevation/gnupg/gnupg-scripts/-/tree/main/Python (Python) === Third-party GPGME bindings ==== C++ wrappers * http://quickgit.kde.org/?p=kdepimlibs.git gpgme++ is a wrapper for gpgme in kdepimlibs ==== C# (c-sharp) wrappers * [[https://github.com/wget/gpgme-sharp|gpgme-sharp]]. It is [[https://www.nuget.org/packages/gpgme-sharp|available on NuGet]] and supports .NET Core The code quality was considered "experimental" and made for 32bits for Windows, but [[https://stackoverflow.com/questions/4156819/using-the-gpgme-library-from-net|some reported success]]. ==== Java wrappers * [[https://github.com/guardianproject/gnupg-for-java|GnuPG-for-Java]] is a Java wrapper for gpgme >=1.5 and GnuPG >=2.x * [[https://github.com/smartrevolution/gnupg-for-java|GnuPG-for-Java]] is a Java wrapper for gpgme and GnuPG 1.x * [[https://github.com/guardianproject/gnupg-for-android|Gnu Privacy Guard]] is an Android app based [[https://github.com/guardianproject/gnupg-for-java|GnuPG-for-Java]] and uses gpgme to provide a GnuPG engine in Android ==== PHP wrappers * https://pecl.php.net/package/gnupg ==== Python wrappers **Use official python-gpg bindings from GPG~ME** based on Py~ME, see above. We just document historic alternatives here: * Py~ME history: see [[https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gpgme.git;a=blob;f=lang/python/README|README of current python3-gpg bindings]]. * A different approach (last release from 2012) is https://launchpad.net/pygpgme , manually written wrapper in C for python2 and python3. GNU ~LGPL v?=2. Packaged for Debian and Ubuntu. ==== Ruby wrappers == * [[https://github.com/ueno/ruby-gpgme|ruby-gpgme]] is a ruby wrapper, which can be installed with: gem install gpgme. ==== Rust wrappers ==== * [[https://github.com/gpg-rs/gpgme|gpgm-rs]] = (not recommended) calling executables directly = A number of elder applications call ~GnuPG executables in a subprocess and interact with them via command line arguments and file-descriptors. This is less perferable to ~G~PGME, because the **command line arguments and text outputs are not an (official) API** to ~G~nuPG. While there is an effort made to keep them stable, using the official ~G~PGME API can manage this more precisely and thus you end up with a more robust solution. ==== C# (c-sharp) * [[https://github.com/WilliamDunne/SharpGPG|SharpGPG]] a GPG wrapper for C# using GPGAPI. ==== Objective-C * [[https://github.com/GPGTools/Libmacgpg|Libmacgpg]] is a Mac OS X Framework built on top of GnuPG (but not gpgme), used as part of the [[https://gpgtools.org/|GPGTools suite]]. ==== PHP * https://pear.php.net/package/Crypt_GPG seems to call the gpg binary directly. (probably cannot do S/MIME then). ==== Python * [[https://pypi.python.org/pypi/python-gnupg|python-gnupg]] using the subprocess module to call the gpg executables (not using the recommended gpgme for python alternatives, see above). Xorg Style license.