Perkeep is your personal storage system.

It's a way to store, sync, share, import, model, and back up content. Keep your stuff for life.

For more, see
Other useful files
  • BUILDING - how to compile it ("go run make.go")
  • CONTRIBUTING - how to do development and contribute
Perkeep Resources
Continuous Integration

Linux Test Status Windows Test Status

Code of Conduct

Please note that this project uses a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.

Expand ▾ Collapse ▴


Path Synopsis
app/hello The hello application serves as an example on how to make stand-alone server applications, interacting with a Perkeep server.
app/publisher The publisher application serves and renders items published by Perkeep.
app/publisher/js This package contains source code for gopherjs, to generate javascript code that is included in the publisher web UI.
app/scanningcabinet The scanning cabinet program is a server application to store scanned documents in Perkeep, and to manage them.
app/scanningcabinet/scancab The scancab tool scans document and uploads them to the scanning cabinet Perkeep application.
app/scanningcabinet/ui TODO(steve.armstrong): Until app/scanningcabinet/handler.go handleUiFile() properly manages Content-Type, be sure to update it whenever adding a new file type to the pattern below.
clients/web/embed/closure The updatelibrary command allows to selectively download from the closure library git repository (at a chosen revision) the resources needed by the Perkeep ui.
clients/web/embed/keepy Package keepy embeds the keepy parakeet animation resources.
clients/web/embed/leaflet Package leaflet provides access to the Leaflet JavaScript and CSS resources, as well as the Leaflet.awesome-markers, and embeds them into the Go binary when compiled with the genfileembed tool.
clients/web/embed/less Package less provides the LESS CSS framework/rewriter.
clients/web/embed/opensans Package opensans provides access to the Font Awesome font library and embeds them into the Go binary when compiled with the genfileembed tool.
clients/web/embed/react Package react provides access to the React JavaScript libraries and embeds them into the Go binary when compiled with the genfileembed tool.
cmd/pk The pk binary is a collection of commands to help with the use of a camlistore server.
cmd/pk-deploy The pk-deploy program deploys Perkeep on cloud computing platforms such as Google Compute Engine or Amazon EC2.
cmd/pk-devimport The pk-devimport command runs an importer, using the importer code linked into the binary, against a Perkeep server.
cmd/pk-get The pk-get tool fetches blobs, files, and directories.
cmd/pk-mount The pk-mount tool mounts a root directory blob onto the given mountpoint.
cmd/pk-put The pk-put tool mainly pushes blobs, files, and directories.
dev update_closure_compiler downloads a new version of the closure compiler if the one in tmp/closure-compiler doesn't exist or is older than the requested version.
dev/devcam The devcam tool is a collection of wrappers around the camlistore programs (camistored, pk-put, pk...) which take care of setup and configuration, so they can be used by developers to ease hacking on camlistore.
dev/envvardoc Program envvardoc will verify all referenced environment variables in go source are properly documented.
internal/azure/storage Package storage implements a generic Azure storage client, not specific to Perkeep.
internal/closure Package closure provides tools to help with the use of the closure library.
internal/closure/genclosuredeps The genclosuredeps command, similarly to the closure tool, outputs to os.Stdout for each .js file, which namespaces it provides, and the namespaces it requires, hence helping the closure library to resolve dependencies between those files.
internal/closure/jstest Package jstest uses the Go testing package to test JavaScript code using Node and Mocha.
internal/geocode Package geocode handles mapping user-entered locations into lat/long polygons.
internal/gpgagent Package gpgagent interacts with the local GPG Agent.
internal/hashutil Package hashutil contains misc hashing functions lacking homes elsewhere.
internal/httputil Package httputil contains a bunch of HTTP utility code, some generic, and some Perkeep-specific.
internal/images/fastjpeg Package fastjpeg uses djpeg(1), from the Independent JPEG Group's ( jpeg package, to quickly down-sample images on load.
internal/images/resize Package resize resizes images.
internal/lru Package lru implements an LRU cache.
internal/magic Package magic implements MIME type sniffing of data based on the well-known "magic" number prefixes in the file.
internal/media Package media provides means for querying information about audio and video data.
internal/netutil Package netutil identifies the system userid responsible for localhost TCP connections.
internal/osutil Package osutil provides operating system-specific path information, and other utility functions.
internal/osutil/gce Package gce configures hooks for running Perkeep for Google Compute Engine.
internal/pinentry Package pinentry interfaces with the pinentry(1) command to securely prompt the user for a password using whichever user interface the user is currently using.
internal/testhooks Package testhooks is a shared package between Perkeep packages and test code, to let tests do gross things that we don't want to expose normally.
internal/video/thumbnail Package thumbnail generates image thumbnails from videos.
misc/docker Command dock builds Perkeep's various Docker images.
misc/docker/synology Command build_syno builds and packages Perkeep for Synology appliances.
misc/release Command make-release builds the tarballs and zip archives for the Perkeep release downloads.
pkg/app Package app provides helpers for server applications interacting with Perkeep.
pkg/auth Package auth implements Camlistore authentication.
pkg/blob Package blob defines types to refer to and retrieve low-level Perkeep blobs.
pkg/blobserver Package blobserver defines how raw blobs are stored and accessed.
pkg/blobserver/archiver Package archiver zips lots of little blobs into bigger zip files and stores them somewhere.
pkg/blobserver/azure Package azure registers the "azure" blobserver storage type, storing blobs in a Microsoft Azure Blob Storage container.
pkg/blobserver/blobpacked Package blobpacked registers the "blobpacked" blobserver storage type, storing blobs initially as one physical blob per logical blob, but then rearranging little physical blobs into large contiguous blobs organized by how they'll likely be accessed.
pkg/blobserver/cond Package cond registers the "cond" conditional blobserver storage type to select routing of get/put operations on blobs to other storage targets as a function of their content.
pkg/blobserver/dir Package dir implements the blobserver Storage interface for a directory, detecting whether the directory is file-per-blob (localdisk) or diskpacked.
pkg/blobserver/diskpacked Package diskpacked registers the "diskpacked" blobserver storage type, storing blobs packed together into monolithic data files with an index listing the sizes and offsets of the little blobs within the large files.
pkg/blobserver/encrypt Package encrypt registers the "encrypt" blobserver storage type which stores all blobs and metadata with NaCl encryption into other wrapped storage targets (e.g.
pkg/blobserver/files Package files implements the blobserver interface by storing each blob in its own file in nested directories.
pkg/blobserver/gethandler Package gethandler implements the HTTP handler for fetching blobs.
pkg/blobserver/google/cloudstorage Package cloudstorage registers the "googlecloudstorage" blob storage type, storing blobs on Google Cloud Storage (not Google Drive).
pkg/blobserver/google/drive Package drive registers the "googledrive" blobserver storage type, storing blobs in a Google Drive folder.
pkg/blobserver/google/drive/service Package service translates blobserver.Storage methods into Google Drive API methods.
pkg/blobserver/handlers Package handlers implements the HTTP interface to the Perkeep blob server.
pkg/blobserver/local Package local implements functionality common to both the "localdisk" and "diskpacked" storage mechanisms.
pkg/blobserver/localdisk Package localdisk registers the "filesystem" blobserver storage type, storing blobs in a forest of sharded directories at the specified root.
pkg/blobserver/memory Package memory registers the "memory" blobserver storage type, storing blobs in an in-memory map.
pkg/blobserver/mongo Package mongo registers the "mongo" blobserver storage type, storing blobs using MongoDB.
pkg/blobserver/namespace Package namespace implements the "namespace" blobserver storage type.
pkg/blobserver/overlay Package overlay registers the "overlay" blobserver storage type that presents storage that is the result of overlaying a storage ("upper") on top of another storage ("lower").
pkg/blobserver/protocol Package protocol contains types for Perkeep protocol types.
pkg/blobserver/proxycache Package proxycache registers the "proxycache" blobserver storage type, which uses a provided blobserver as a cache for a second origin blobserver.
pkg/blobserver/remote Package remote registers the "remote" blobserver storage type, storing and fetching blobs from a remote Perkeep server over HTTPS.
pkg/blobserver/replica Package replica registers the "replica" blobserver storage type, providing synchronous replication to one more backends.
pkg/blobserver/s3 Package s3 registers the "s3" blobserver storage type, storing blobs in an Amazon Web Services' S3 storage bucket.
pkg/blobserver/sftp Package sftp registers the "sftp" blobserver storage type, storing blobs one-per-file in a forest of sharded directories to a remote SFTP server over an SSH connection.
pkg/blobserver/shard Package shard registers the "shard" blobserver storage type, predictably spraying out blobs out over the provided backends based on their blobref.
pkg/blobserver/stats Package stats contains an in-memory StatReceiver that only stores sizes of received blobs but not their contents.
pkg/blobserver/storagetest Package storagetest tests blobserver.Storage implementations
pkg/blobserver/union Package union registers the "union" read-only blobserver storage type to read from the given subsets, serving the first responding.
pkg/buildinfo Package buildinfo provides information about the current build.
pkg/cacher Package cacher provides various blobref fetching caching mechanisms.
pkg/camerrors Package camerrors define specific errors that are used to decide on how to deal with some failure cases.
pkg/camlegal Package camlegal registers the Perkeep License
pkg/client Package client implements a Perkeep client.
pkg/client/android Package android contains code specific to running the Perkeep client code as a child process on Android.
pkg/cmdmain Package cmdmain contains the shared implementation for pk-get, pk-put, pk, and other Perkeep command-line tools.
pkg/constants Package constants contains Perkeep constants.
pkg/conv Package conv contains utilities for parsing values delimited by spaces.
pkg/deploy/gce Package gce provides tools to deploy Perkeep on Google Compute Engine.
pkg/env Package env detects what sort of environment Perkeep is running in.
pkg/fileembed Package fileembed provides access to static data resources (images, HTML, css, etc) embedded into the binary with genfileembed.
pkg/fileembed/genfileembed The genfileembed command embeds resources into Go files, to eliminate run-time dependencies on files on the filesystem.
pkg/fs Package fs implements a FUSE filesystem for Perkeep and is used by the pk-mount binary.
pkg/gc Package gc defines a generic garbage collector.
pkg/gpgchallenge Package gpgchallenge provides a Client and a Server so that a Client can prove ownership of an IP address by solving a GPG challenge sent by the Server at the claimed IP.
pkg/gpgchallenge/client The client command is an example client of the gpgchallenge package.
pkg/gpgchallenge/server The server command is an example server of the gpgchallenge package.
pkg/importer Package importer imports content from third-party websites.
pkg/importer/allimporters Package allimporters registers all the importer implementations.
pkg/importer/dummy Package dummy is an example importer for development purposes.
pkg/importer/feed Package feed implements an importer for RSS, Atom, and RDF feeds.
pkg/importer/feed/atom Package atom defines XML data structures for an Atom feed.
pkg/importer/feed/rdf Package rdf defines XML data structures for an RDF feed.
pkg/importer/feed/rss Package rss defines XML data structures for an RSS feed.
pkg/importer/flickr Package flickr implements an importer for accounts.
pkg/importer/gphotos Package gphotos implements a Google Photos importer, using the Google Drive API to access the Google Photos folder.
pkg/importer/instapaper Package instapaper implements a importer.
pkg/importer/mastodon Package mastodon provides an importer for servers using the Mastodon API.
pkg/importer/picasa Package picasa implements an importer for accounts.
pkg/importer/pinboard Package pinboard imports posts.
pkg/importer/plaid Package plaid implements an importer for financial transactions from
pkg/importer/swarm Package swarm implements an importer for Foursquare Swarm check-ins.
pkg/importer/test Package test provides common functionality for importer tests.
pkg/importer/twitter Package twitter implements a importer.
pkg/index Package index provides a generic indexing system on top of the abstract Storage interface.
pkg/index/indextest Package indextest contains the unit tests for the indexer so they can be re-used for each specific implementation of the index Storage interface.
pkg/index/sqlindex Package sqlindex implements the sorted.KeyValue interface using an *sql.DB.
pkg/jsonsign Package jsonsign implements Perkeep's cryptographic signing and verification of JSON blobs.
pkg/jsonsign/signhandler Package signhandler implements the HTTP interface to signing and verifying Perkeep JSON blobs.
pkg/kvutil Package kvutil contains helpers related to
pkg/publish Package publish exposes the types and functions that can be used from a Go template, for publishing.
pkg/schema Package schema manipulates Camlistore schema blobs.
pkg/schema/nodeattr Package nodeattr contains constants for permanode attribute names.
pkg/search Package search describes and answers Perkeep search queries.
pkg/server Package server implements the server HTTP interface for the UI, publishing, setup, status, sync, thubnailing, etc.
pkg/server/app Package app helps with configuring and starting server applications from Perkeep.
pkg/serverinit Package serverinit is responsible for mapping from a Perkeep configuration file and instantiating HTTP Handlers for all the necessary endpoints.
pkg/sorted Package sorted provides a KeyValue interface and constructor registry.
pkg/sorted/buffer Package buffer provides a sorted.KeyValue implementation that buffers one KeyValue implementation in front of an another.
pkg/sorted/kvfile Package kvfile provides an implementation of sorted.KeyValue on top of a single mutable database file on disk using
pkg/sorted/kvtest Package kvtest tests sorted.KeyValue implementations.
pkg/sorted/leveldb Package leveldb provides an implementation of sorted.KeyValue on top of a single mutable database file on disk using
pkg/sorted/mongo Package mongo provides an implementation of sorted.KeyValue using MongoDB.
pkg/sorted/mysql Package mysql provides an implementation of sorted.KeyValue on top of MySQL.
pkg/sorted/postgres Package postgres provides an implementation of sorted.KeyValue on top of PostgreSQL.
pkg/sorted/sqlite Package sqlite provides an implementation of sorted.KeyValue using an SQLite database file.
pkg/sorted/sqlkv Package sqlkv implements the sorted.KeyValue interface using an *sql.DB.
pkg/test Package test provides common Perkeep test objects.
pkg/test/asserts Package asserts provides a bad implementation of test predicate helpers.
pkg/test/dockertest Package dockertest contains helper functions for setting up and tearing down docker containers to aid in testing.
pkg/types/camtypes Package camtypes is like the types package, but higher-level and contains Perkeep-specific types.
pkg/types/clientconfig Package clientconfig provides types related to the client configuration file.
pkg/types/serverconfig Package serverconfig provides types related to the server configuration file.
pkg/webserver Package webserver implements a superset wrapper of http.Server.
server/camnetdns The camnetdns server serves's DNS server and its DNS challenges
server/perkeepd The perkeepd binary is the Perkeep server.
server/perkeepd/ui Package ui contains the resources for the Camlistore web UI.
MODULE server/perkeepd/ui/goui