diff --git a/_proto/aaa.proto b/_proto/aaa.proto
new file mode 100644
index 0000000000000000000000000000000000000000..162b94b7742de6a8aea67527164cf37f8cae12d9
--- /dev/null
+++ b/_proto/aaa.proto
@@ -0,0 +1,53 @@
+syntax = "proto3";
+package hapi;
+
+message Chartfile {
+  string name = 1;
+  string version = 2;
+}
+
+message Chart {
+  // Option 1: Chart is raw []byte data
+  // Option 2: List of files as []byte data, with special treatment for Chart.yaml
+  // Option 3: Completely parsed out (probably very inflexible, ultimately)
+
+  // Option 2:
+  Chartfile chartfile = 1;
+  Values defaultValues = 2;
+  map<string,bytes> templates = 3; // filename => []bytes
+  repeated Chart charts = 4;
+}
+
+// Values represents a set of values that will be passed into the template.
+message Values {
+  // Option 1: "values" is unparsed TOML data (raw []byte)
+  // Option 2: Model TOML in Protobuf (not _too_ bad)
+  // Option 3: Force everything into a map[string]string model
+}
+
+message Release {
+  string name = 1;
+}
+
+message Status {
+  StatusCode code = 1;
+  string msg = 2;
+}
+
+message Error {
+  ErrorCode errror_code = 1;
+  string error_msg = 2;
+}
+
+enum ErrorCode {
+  ERROR_CODE_UNSET = 0;
+  BAD_REQUEST = 1;
+}
+
+enum StatusCode {
+  STATUS_CODE_UNSET = 0;
+  UNKNOWN = 1;
+  DEPLOYED = 2;
+  DELETED = 3;
+  SUPERSEDED = 4;
+}
diff --git a/_proto/chartfile.proto b/_proto/chartfile.proto
new file mode 100644
index 0000000000000000000000000000000000000000..df84dd38755f321a682b6f831d7198e7eb8ee482
--- /dev/null
+++ b/_proto/chartfile.proto
@@ -0,0 +1,3 @@
+syntax = "proto3";
+package hapi;
+
diff --git a/_proto/get.proto b/_proto/get.proto
new file mode 100644
index 0000000000000000000000000000000000000000..e66fcc03e93b629b7945bcf37d4d9be612ea3310
--- /dev/null
+++ b/_proto/get.proto
@@ -0,0 +1,20 @@
+syntax = "proto3";
+package hapi;
+
+import "aaa.proto";
+
+message GetRequest {
+  string name = 1;
+}
+
+message GetResponseError {
+  oneof response {
+    Error err = 1;
+    GetResponse get_response = 2;
+  }
+}
+
+message GetResponse {
+  Chart chart = 1;
+  Values values = 2;
+}
diff --git a/_proto/helm.proto b/_proto/helm.proto
index bf6f4bbeb4e504929c804c32fc67d4c5c735c8dc..7abfe35e36b451296a59b52bd64a9e0fac8083a5 100644
--- a/_proto/helm.proto
+++ b/_proto/helm.proto
@@ -1,10 +1,36 @@
 syntax = "proto3";
 
-option java_package = "sh.helm";
+/*
+// No server
+helm init
+helm create
+helm fetch // Fetch chart from repo
+helm search
+helm package
+
+// Server
+
+// Releases
+helm install CHART
+helm list
+helm uninstall RELEASE
+helm status RELEASE
+helm get RELEASE
+helm update RELEASE
+*/
 
 // hapi: The Helm API
 package hapi;
 
+service ReleaseService {
+  rpc Install (InstallRequest) returns (InstallResponseError) {}
+  rpc List (ListRequest) returns (ListResponseError) {}
+  rpc Uninstall (UninstallRequest) returns (UninstallResponseError) {}
+  rpc Status (StatusRequest) returns (StatusResponseError) {}
+  rpc Get (GetRequest) returns (GetResponseError) {}
+  // rpc Update (UpdateRequest) returns (UpdateResponseError) {}
+}
+
 // Probe is used to check liveness and readiness.
 service Probe {
   // Run a readiness test.
@@ -20,13 +46,3 @@ message PingRequest {
 message PingResponse {
   string status = 1;
 }
-
-message Chart {
-  string name = 1;
-}
-message Values {
-  string name = 1;
-}
-message Release {
-  string name = 1;
-}
diff --git a/_proto/install.proto b/_proto/install.proto
new file mode 100644
index 0000000000000000000000000000000000000000..1d6459671ea10267cb07a89b730ec950cd5b6342
--- /dev/null
+++ b/_proto/install.proto
@@ -0,0 +1,20 @@
+syntax = "proto3";
+package hapi;
+
+message InstallRequest{
+  string name = 1
+  Chart chart = 2
+  Values values = 3
+}
+
+message InstallResponseError {
+  oneof response {
+    Error = 1
+    InstallResponse = 2
+  }
+}
+
+message InstallResponse{
+  string name = 1
+  Status status = 2
+}
diff --git a/_proto/list.proto b/_proto/list.proto
new file mode 100644
index 0000000000000000000000000000000000000000..6dc0b9f5dc6e54ce4ff68a91d23e28ff3728b048
--- /dev/null
+++ b/_proto/list.proto
@@ -0,0 +1,20 @@
+syntax = "proto3";
+package hapi;
+
+message ListRequest {
+  int64 limit  = 1;
+  int64 offset = 2;
+}
+
+message ListResponseError {
+  oneof response {
+    Error = 1
+    ListResponse = 2
+  }
+}
+message ListResponse {
+  repeated Release releases = 1;
+  int64 count  = 2;
+  int64 offset = 3;
+  int64 total  = 4;
+}
diff --git a/_proto/status.proto b/_proto/status.proto
new file mode 100644
index 0000000000000000000000000000000000000000..87ae4d5f9f040a222cfb35d593ffc6a2877ca7a8
--- /dev/null
+++ b/_proto/status.proto
@@ -0,0 +1,17 @@
+syntax = "proto3";
+package hapi;
+
+message StatusRequest {
+  string name = 1
+}
+
+message StatusResponseError {
+  oneof response {
+    Error = 1
+    StatusResponse = 2
+  }
+}
+message StatusResponse {
+  Release release = 1;
+  Status status = 2
+}
diff --git a/_proto/uninstall.proto b/_proto/uninstall.proto
new file mode 100644
index 0000000000000000000000000000000000000000..60a348f3d2008275a1622b61ed15f024fdc8f7ce
--- /dev/null
+++ b/_proto/uninstall.proto
@@ -0,0 +1,17 @@
+syntax = "proto3";
+package hapi;
+
+message UninstallRequest{
+  string name = 1
+}
+
+message UninstallResponseError {
+  oneof response {
+    Error = 1
+    UninstallResponse = 2
+ }
+}
+
+message UninstallResponse{
+  Status status = 1
+}