This paper introduces the concept of three dimensional (3D) barcodes. A 3D barcode is composed of an array of 3D cells, called modules, and each can be either filled or empty, corresponding to two possible values of a bit. These barcodes have great theoretical promise thanks to their very large information capacity, which grows as the cube of the linear size of the barcode, and in addition are ... [Show full abstract] becoming practically manufacturable thanks to the ubiquitous use of 3D printers. In order to make these 3D barcodes practical for consumers, it is important to keep the decoding simple using commonly available means like smartphones. We therefore limit ourselves to decoding mechanisms based only on three projections of the barcode, which imply specific constraints on the barcode itself. The three projections produce the marginal sums of the 3D cube, which are the counts of filled-in modules along each Cartesian axis. In this paper we present some of the theoretical aspects of the 2D and 3D cases, and describe the resulting complexity of the 3D case. We then describe a method to reduce these complexities into a practical application. The method features an asymmetric coding scheme, where the decoder is much simpler than the encoder. We close by demonstrating 3D barcodes we created and their usability.