.. Copyright 2014-present PlatformIO Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. .. _library_creating: .. |PIOAPICR| replace:: *PlatformIO Library Registry Crawler* Creating Library ================ *PlatformIO* :ref:`librarymanager` doesn't have any requirements to a library source code structure. The only one requirement is library's manifest file - :ref:`library_config`. It can be located inside your library or in the another location where |PIOAPICR| will have *HTTP* access. Updates to existing libraries are done every 24 hours. In case a more urgent update is required, you can post a request on PlatformIO `community `_. .. contents:: Source Code Location -------------------- There are a several ways how to share your library with the whole world (see `examples `_). You can hold a lot of libraries (split into separated folders) inside one of the repository/archive. In this case, you need to specify ``include`` option of :ref:`libjson_export` field to relative path to your library's source code. At GitHub ^^^^^^^^^ **Recommended** If a library source code is located at `GitHub `_, then you **need to specify** only these fields in the :ref:`library_config`: * :ref:`libjson_name` * :ref:`libjson_version` (is not required, but highly recommended for new :ref:`librarymanager`) * :ref:`libjson_keywords` * :ref:`libjson_description` * :ref:`libjson_repository` |PIOAPICR| will populate the rest fields, like :ref:`libjson_authors` with an actual information from *GitHub*. Example, `DallasTemperature `_: .. code-block:: javascript { "name": "DallasTemperature", "keywords": "onewire, 1-wire, bus, sensor, temperature", "description": "Arduino Library for Dallas Temperature ICs (DS18B20, DS18S20, DS1822, DS1820)", "repository": { "type": "git", "url": "https://github.com/milesburton/Arduino-Temperature-Control-Library.git" }, "authors": [ { "name": "Miles Burton", "email": "miles@mnetcs.com", "url": "http://www.milesburton.com", "maintainer": true }, { "name": "Tim Newsome", "email": "nuisance@casualhacker.net" }, { "name": "Guil Barros", "email": "gfbarros@bappos.com" }, { "name": "Rob Tillaart", "email": "rob.tillaart@gmail.com" } ], "dependencies": { "name": "OneWire", "authors": "Paul Stoffregen", "frameworks": "arduino" }, "version": "3.7.7", "frameworks": "arduino", "platforms": "*" } Under VCS (SVN/GIT) ^^^^^^^^^^^^^^^^^^^ |PIOAPICR| can operate with a library source code that is under *VCS* control. The list of **required** fields in the :ref:`library_config` will look like: * :ref:`libjson_name` * :ref:`libjson_keywords` * :ref:`libjson_description` * :ref:`libjson_authors` * :ref:`libjson_repository` Example: .. code-block:: javascript { "name": "XBee", "keywords": "xbee, protocol, radio", "description": "Arduino library for communicating with XBees in API mode", "authors": { "name": "Andrew Rapp", "email": "andrew.rapp@gmail.com", "url": "https://code.google.com/u/andrew.rapp@gmail.com/" }, "repository": { "type": "git", "url": "https://code.google.com/p/xbee-arduino/" }, "frameworks": "arduino", "platforms": "atmelavr" } Self-hosted ^^^^^^^^^^^ You can manually archive (*Zip, Tar.Gz*) your library source code and host it in the *Internet*. Then you should specify the additional fields, like :ref:`libjson_version` and :ref:`libjson_downloadurl`. The final list of **required** fields in the :ref:`library_config` will look like: * :ref:`libjson_name` * :ref:`libjson_keywords` * :ref:`libjson_description` * :ref:`libjson_authors` * :ref:`libjson_version` * :ref:`libjson_downloadurl` .. code-block:: javascript { "name": "OneWire", "keywords": "onewire, 1-wire, bus, sensor, temperature, ibutton", "description": "Control devices (from Dallas Semiconductor) that use the One Wire protocol (DS18S20, DS18B20, DS2408 and etc)", "authors": { "name": "Paul Stoffregen", "url": "http://www.pjrc.com/teensy/td_libs_OneWire.html" }, "version": "2.2", "downloadUrl": "http://www.pjrc.com/teensy/arduino_libraries/OneWire.zip", "export": { "include": "OneWire" }, "frameworks": "arduino", "platforms": "atmelavr" } Register -------- The registration requirements: * A library must adhere to the :ref:`library_config` specification. * There must be public *HTTP* access to the library :ref:`library_config` file. Now, you can :ref:`register ` your library and allow others to :ref:`install ` it. .. _library_creating_examples: Examples -------- Command: .. code-block:: bash $ platformio lib register http://my.example.com/library.json * `GitHub + fixed release `_ * `Dependencies by author and framework `_ * `Multiple libraries in the one repository `_