View Source

h1. Developing for Couchbase

Couchbase has a number of official client libraries for development. In addition, Couchbase Server is protocol compatible with memcached, so you may use any number of existing client libraries against the server.

h2. Client Libraries

* [.NET|http://www.couchbase.com/develop/net/current]
* [Java|http://www.couchbase.com/develop/java/current]
* [PHP|http://www.couchbase.com/develop/php/current]
* [Ruby|http://www.couchbase.com/develop/ruby/current]
* [C|http://www.couchbase.com/develop/c/current]

If you want to develop your own Couchbase clients, see [Developing Couchbase Clients|http://www.couchbase.com/docs/couchbase-manual-1.8/couchbase-client-development.html]

h1. Developing Couchbase Server

If you're interested in contributing to Couchbase Server or understanding how it works, please look at the [repositories and architecture|couchbase:Architecture and Source Repositories] or [contributing changes|couchbase:Contributing Changes].

h2. Protocol Additions

Couchbase Server has developed a set of additional protocol operations over the course of releases.

* [couchbase:TAP Protocol] (since 1.6)
* [couchbase:Observe] (since 2.0)
* [couchbase:Replica Read] (since 2.1)
* [CCCP:Cluster Configuration Carrier Publication|couchbase:Cluster Configuration Carrier Publication] (since 2.5)

h2. Drafts
* [Common Flags|https://docs.google.com/document/d/1V653a6FF6DOqdT4d-fKIjGkHabDaNGZsvbtsUKJyeLc]
This project aims to provide a consistent method for storing document meta-data. Specifically it will define the exact formatting of the flags field as well as the datatype field to allow the server to make reasonable assumptions as well.
* [Common Connection String|https://docs.google.com/document/d/172ausWsYt3eYYOZ1lYHVS8ccbrrVJaGwHIRsf_O_Hyc]
The goal of this project is to define a consistant method of providing cluster host information through the clients. This proposal does this by defining an specific hostname format that will be accepted for the purpose of initializing and bootstrapping a cluster.
* [SDK 2.0|https://docs.google.com/document/d/1HgVEJetcIfeIqviKC9zdlv_7IEkWpstatzxeydkLF3A]
The purpose of this proposal is to outline a new uniform interface for the various SDKs to use as a standard for implementing their individual APIs.
* [NG Bucket Config|https://docs.google.com/document/d/1FhGusVWYCAL3Esey4vYCnaV8rAaZhw4XAtJ0w4hftyE]
Proposal for a new, better cluster configuration format that can handle SSL and other is extensible enough to handle future extension projects.
* [SSL Dev Experience|https://docs.google.com/document/d/1zF4ycqMVKgthfJYk83jo80KlOs1g-aoz_wa9UdeR9FI]
Documentation of the developer experience for SSL along with specific issues and pain points.