diff --git a/src/ruby/bin/google/pubsub/v2/pubsub.rb b/src/ruby/bin/google/pubsub/v2/pubsub.rb
new file mode 100644
index 0000000000000000000000000000000000000000..28b7143b6626584faec3779effe60cacc94a926f
--- /dev/null
+++ b/src/ruby/bin/google/pubsub/v2/pubsub.rb
@@ -0,0 +1,144 @@
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: google/pubsub/v2/pubsub.proto
+
+require 'google/protobuf'
+
+require 'google/protobuf/empty'
+Google::Protobuf::DescriptorPool.generated_pool.build do
+  add_message "google.pubsub.v2.Topic" do
+    optional :name, :string, 1
+    optional :garbage_collect_seconds, :int64, 2
+  end
+  add_message "google.pubsub.v2.PubsubMessage" do
+    optional :data, :string, 1
+    repeated :labels, :message, 2, "google.pubsub.v2.PubsubMessage.LabelsEntry"
+    optional :message_id, :string, 3
+    optional :data_truncated, :bool, 4
+  end
+  add_message "google.pubsub.v2.PubsubMessage.LabelsEntry" do
+    optional :key, :string, 1
+    optional :value, :string, 2
+  end
+  add_message "google.pubsub.v2.GetTopicRequest" do
+    optional :topic, :string, 1
+  end
+  add_message "google.pubsub.v2.PublishRequest" do
+    optional :topic, :string, 1
+    repeated :messages, :message, 2, "google.pubsub.v2.PubsubMessage"
+  end
+  add_message "google.pubsub.v2.PublishResponse" do
+    repeated :message_ids, :string, 1
+  end
+  add_message "google.pubsub.v2.ListTopicsRequest" do
+    optional :query, :string, 1
+    optional :max_results, :int32, 2
+    optional :page_token, :string, 3
+  end
+  add_message "google.pubsub.v2.ListTopicsResponse" do
+    repeated :topics, :message, 1, "google.pubsub.v2.Topic"
+    optional :next_page_token, :string, 2
+  end
+  add_message "google.pubsub.v2.DeleteTopicRequest" do
+    optional :topic, :string, 1
+  end
+  add_message "google.pubsub.v2.Subscription" do
+    optional :name, :string, 1
+    optional :topic, :string, 2
+    optional :query, :string, 3
+    optional :truncation_policy, :message, 4, "google.pubsub.v2.Subscription.TruncationPolicy"
+    optional :push_config, :message, 5, "google.pubsub.v2.PushConfig"
+    optional :ack_deadline_seconds, :int32, 6
+    optional :garbage_collect_seconds, :int64, 7
+  end
+  add_message "google.pubsub.v2.Subscription.TruncationPolicy" do
+    optional :max_bytes, :int64, 1
+    optional :max_age_seconds, :int64, 2
+  end
+  add_message "google.pubsub.v2.PushConfig" do
+    optional :push_endpoint, :string, 1
+  end
+  add_message "google.pubsub.v2.PubsubEvent" do
+    optional :subscription, :string, 1
+    optional :ack_id, :string, 5
+    optional :message, :message, 2, "google.pubsub.v2.PubsubMessage"
+    optional :truncated, :bool, 3
+    optional :end_of_stream, :bool, 4
+  end
+  add_message "google.pubsub.v2.GetSubscriptionRequest" do
+    optional :subscription, :string, 1
+  end
+  add_message "google.pubsub.v2.ListSubscriptionsRequest" do
+    optional :query, :string, 1
+    optional :max_results, :int32, 3
+    optional :page_token, :string, 4
+  end
+  add_message "google.pubsub.v2.ListSubscriptionsResponse" do
+    repeated :subscriptions, :message, 1, "google.pubsub.v2.Subscription"
+    optional :next_page_token, :string, 2
+  end
+  add_message "google.pubsub.v2.TruncateSubscriptionRequest" do
+    optional :subscription, :string, 1
+  end
+  add_message "google.pubsub.v2.DetachSubscriptionRequest" do
+    optional :subscription, :string, 1
+  end
+  add_message "google.pubsub.v2.DeleteSubscriptionRequest" do
+    optional :subscription, :string, 1
+  end
+  add_message "google.pubsub.v2.ModifyPushConfigRequest" do
+    optional :subscription, :string, 1
+    optional :push_config, :message, 2, "google.pubsub.v2.PushConfig"
+  end
+  add_message "google.pubsub.v2.PullRequest" do
+    optional :subscription, :string, 1
+    optional :return_immediately, :bool, 2
+    optional :max_events, :int32, 3
+  end
+  add_message "google.pubsub.v2.PullResponse" do
+    repeated :pubsub_events, :message, 1, "google.pubsub.v2.PubsubEvent"
+  end
+  add_message "google.pubsub.v2.ModifyAckDeadlineRequest" do
+    optional :subscription, :string, 1
+    optional :ack_id, :string, 2
+    optional :ack_deadline_seconds, :int32, 3
+  end
+  add_message "google.pubsub.v2.AcknowledgeRequest" do
+    optional :subscription, :string, 1
+    repeated :ack_ids, :string, 2
+  end
+  add_message "google.pubsub.v2.HandlePubsubEventResponse" do
+    optional :acknowledge_explicitly, :bool, 1
+  end
+end
+
+module Google
+  module Pubsub
+    module V2
+      Topic = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v2.Topic").msgclass
+      PubsubMessage = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v2.PubsubMessage").msgclass
+      PubsubMessage::LabelsEntry = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v2.PubsubMessage.LabelsEntry").msgclass
+      GetTopicRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v2.GetTopicRequest").msgclass
+      PublishRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v2.PublishRequest").msgclass
+      PublishResponse = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v2.PublishResponse").msgclass
+      ListTopicsRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v2.ListTopicsRequest").msgclass
+      ListTopicsResponse = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v2.ListTopicsResponse").msgclass
+      DeleteTopicRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v2.DeleteTopicRequest").msgclass
+      Subscription = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v2.Subscription").msgclass
+      Subscription::TruncationPolicy = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v2.Subscription.TruncationPolicy").msgclass
+      PushConfig = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v2.PushConfig").msgclass
+      PubsubEvent = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v2.PubsubEvent").msgclass
+      GetSubscriptionRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v2.GetSubscriptionRequest").msgclass
+      ListSubscriptionsRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v2.ListSubscriptionsRequest").msgclass
+      ListSubscriptionsResponse = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v2.ListSubscriptionsResponse").msgclass
+      TruncateSubscriptionRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v2.TruncateSubscriptionRequest").msgclass
+      DetachSubscriptionRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v2.DetachSubscriptionRequest").msgclass
+      DeleteSubscriptionRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v2.DeleteSubscriptionRequest").msgclass
+      ModifyPushConfigRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v2.ModifyPushConfigRequest").msgclass
+      PullRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v2.PullRequest").msgclass
+      PullResponse = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v2.PullResponse").msgclass
+      ModifyAckDeadlineRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v2.ModifyAckDeadlineRequest").msgclass
+      AcknowledgeRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v2.AcknowledgeRequest").msgclass
+      HandlePubsubEventResponse = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v2.HandlePubsubEventResponse").msgclass
+    end
+  end
+end
diff --git a/src/ruby/bin/google/pubsub/v2/pubsub_services.rb b/src/ruby/bin/google/pubsub/v2/pubsub_services.rb
new file mode 100644
index 0000000000000000000000000000000000000000..475332a04b26be305a36c7b3e2c34fa13586b312
--- /dev/null
+++ b/src/ruby/bin/google/pubsub/v2/pubsub_services.rb
@@ -0,0 +1,73 @@
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# Source: google/pubsub/v2/pubsub.proto for package 'google.pubsub.v2'
+
+require 'grpc'
+require 'google/pubsub/v2/pubsub'
+
+module Google
+  module Pubsub
+    module V2
+      module PublisherService
+
+        # TODO: add proto service documentation here
+        class Service
+
+          include GRPC::GenericService
+
+          self.marshal_class_method = :encode
+          self.unmarshal_class_method = :decode
+          self.service_name = 'google.pubsub.v2.PublisherService'
+
+          rpc :CreateTopic, Topic, Topic
+          rpc :Publish, PublishRequest, PublishResponse
+          rpc :GetTopic, GetTopicRequest, Topic
+          rpc :ListTopics, ListTopicsRequest, ListTopicsResponse
+          rpc :DeleteTopic, DeleteTopicRequest, Empty
+        end
+
+        Stub = Service.rpc_stub_class
+      end
+      module SubscriberService
+
+        # TODO: add proto service documentation here
+        class Service
+
+          include GRPC::GenericService
+
+          self.marshal_class_method = :encode
+          self.unmarshal_class_method = :decode
+          self.service_name = 'google.pubsub.v2.SubscriberService'
+
+          rpc :CreateSubscription, Subscription, Subscription
+          rpc :GetSubscription, GetSubscriptionRequest, Subscription
+          rpc :ListSubscriptions, ListSubscriptionsRequest, ListSubscriptionsResponse
+          rpc :DeleteSubscription, DeleteSubscriptionRequest, Empty
+          rpc :TruncateSubscription, TruncateSubscriptionRequest, Empty
+          rpc :DetachSubscription, DetachSubscriptionRequest, Empty
+          rpc :ModifyAckDeadline, ModifyAckDeadlineRequest, Empty
+          rpc :Acknowledge, AcknowledgeRequest, Empty
+          rpc :Pull, PullRequest, PullResponse
+          rpc :ModifyPushConfig, ModifyPushConfigRequest, Empty
+        end
+
+        Stub = Service.rpc_stub_class
+      end
+      module PushEndpointService
+
+        # TODO: add proto service documentation here
+        class Service
+
+          include GRPC::GenericService
+
+          self.marshal_class_method = :encode
+          self.unmarshal_class_method = :decode
+          self.service_name = 'google.pubsub.v2.PushEndpointService'
+
+          rpc :HandlePubsubEvent, PubsubEvent, HandlePubsubEventResponse
+        end
+
+        Stub = Service.rpc_stub_class
+      end
+    end
+  end
+end