diff --git a/ruby/ext/google/protobuf_c/defs.c b/ruby/ext/google/protobuf_c/defs.c
index 8761b84..9141c7b 100644
--- a/ruby/ext/google/protobuf_c/defs.c
+++ b/ruby/ext/google/protobuf_c/defs.c
@@ -489,7 +489,7 @@
  * call-seq:
  *     FileDescriptor.new => file
  *
- * Returns a new file descriptor. The syntax must be set before it's passed
+ * Returns a new file descriptor. May
  * to a builder.
  */
 static VALUE FileDescriptor_initialize(VALUE _self, VALUE cookie,
@@ -521,28 +521,6 @@
 
 /*
  * call-seq:
- *     FileDescriptor.syntax => syntax
- *
- * Returns this file descriptors syntax.
- *
- * Valid syntax versions are:
- *     :proto2 or :proto3.
- */
-static VALUE FileDescriptor_syntax(VALUE _self) {
-  FileDescriptor* self = ruby_to_FileDescriptor(_self);
-
-  switch (upb_FileDef_Syntax(self->filedef)) {
-    case kUpb_Syntax_Proto3:
-      return ID2SYM(rb_intern("proto3"));
-    case kUpb_Syntax_Proto2:
-      return ID2SYM(rb_intern("proto2"));
-    default:
-      return Qnil;
-  }
-}
-
-/*
- * call-seq:
  *     FileDescriptor.options => options
  *
  * Returns the `FileOptions` for this `FileDescriptor`.
@@ -564,7 +542,6 @@
   rb_define_alloc_func(klass, FileDescriptor_alloc);
   rb_define_method(klass, "initialize", FileDescriptor_initialize, 3);
   rb_define_method(klass, "name", FileDescriptor_name, 0);
-  rb_define_method(klass, "syntax", FileDescriptor_syntax, 0);
   rb_define_method(klass, "options", FileDescriptor_options, 0);
   rb_gc_register_address(&cFileDescriptor);
   cFileDescriptor = klass;
@@ -738,6 +715,28 @@
 
 /*
  * call-seq:
+ *     FieldDescriptor.has_presence? => bool
+ *
+ * Returns whether this field tracks presence.
+ */
+static VALUE FieldDescriptor_has_presence(VALUE _self) {
+  FieldDescriptor* self = ruby_to_FieldDescriptor(_self);
+  return upb_FieldDef_HasPresence(self->fielddef) ? Qtrue : Qfalse;
+}
+
+/*
+ * call-seq:
+ *     FieldDescriptor.is_packed? => bool
+ *
+ * Returns whether this is a repeated field that uses packed encoding.
+ */
+static VALUE FieldDescriptor_is_packed(VALUE _self) {
+  FieldDescriptor* self = ruby_to_FieldDescriptor(_self);
+  return upb_FieldDef_IsPacked(self->fielddef) ? Qtrue : Qfalse;
+}
+
+/*
+ * call-seq:
  *     FieldDescriptor.json_name => json_name
  *
  * Returns this field's json_name, as a Ruby string, or nil if not yet set.
@@ -943,6 +942,8 @@
   rb_define_method(klass, "name", FieldDescriptor_name, 0);
   rb_define_method(klass, "type", FieldDescriptor__type, 0);
   rb_define_method(klass, "default", FieldDescriptor_default, 0);
+  rb_define_method(klass, "has_presence?", FieldDescriptor_has_presence, 0);
+  rb_define_method(klass, "is_packed?", FieldDescriptor_is_packed, 0);
   rb_define_method(klass, "json_name", FieldDescriptor_json_name, 0);
   rb_define_method(klass, "label", FieldDescriptor_label, 0);
   rb_define_method(klass, "number", FieldDescriptor_number, 0);
@@ -1165,6 +1166,17 @@
 
 /*
  * call-seq:
+ *     EnumDescriptor.is_closed? => bool
+ *
+ * Returns whether this enum is open or closed.
+ */
+static VALUE EnumDescriptor_is_closed(VALUE _self) {
+  EnumDescriptor* self = ruby_to_EnumDescriptor(_self);
+  return upb_EnumDef_IsClosed(self->enumdef) ? Qtrue : Qfalse;
+}
+
+/*
+ * call-seq:
  *     EnumDescriptor.name => name
  *
  * Returns the name of this enum type.
@@ -1275,6 +1287,7 @@
   rb_define_method(klass, "each", EnumDescriptor_each, 0);
   rb_define_method(klass, "enummodule", EnumDescriptor_enummodule, 0);
   rb_define_method(klass, "file_descriptor", EnumDescriptor_file_descriptor, 0);
+  rb_define_method(klass, "is_closed?", EnumDescriptor_is_closed, 0);
   rb_define_method(klass, "options", EnumDescriptor_options, 0);
   rb_include_module(klass, rb_mEnumerable);
   rb_gc_register_address(&cEnumDescriptor);
diff --git a/ruby/lib/google/protobuf/ffi/descriptor.rb b/ruby/lib/google/protobuf/ffi/descriptor.rb
index 3eb1086..3175d41 100644
--- a/ruby/lib/google/protobuf/ffi/descriptor.rb
+++ b/ruby/lib/google/protobuf/ffi/descriptor.rb
@@ -158,7 +158,6 @@
       attach_function :oneof_count,          :upb_MessageDef_OneofCount,              [Descriptor], :int
       attach_function :message_options,      :Descriptor_serialized_options,          [Descriptor, :pointer, Internal::Arena], :pointer
       attach_function :get_well_known_type,  :upb_MessageDef_WellKnownType,           [Descriptor], WellKnown
-      attach_function :message_def_syntax,   :upb_MessageDef_Syntax,                  [Descriptor], Syntax
       attach_function :find_msg_def_by_name, :upb_MessageDef_FindByNameWithSize,      [Descriptor, :string, :size_t, :FieldDefPointer, :OneofDefPointer], :bool
     end
   end
diff --git a/ruby/lib/google/protobuf/ffi/field_descriptor.rb b/ruby/lib/google/protobuf/ffi/field_descriptor.rb
index b15c910..cbc1e82 100644
--- a/ruby/lib/google/protobuf/ffi/field_descriptor.rb
+++ b/ruby/lib/google/protobuf/ffi/field_descriptor.rb
@@ -156,6 +156,14 @@
         @has_presence ||= Google::Protobuf::FFI.get_has_presence(self)
       end
 
+      ##
+      # Tests if this is a repeated field that uses packed encoding.
+      #
+      # @return [Boolean] True iff this field is packed
+      def is_packed?
+        @is_packed ||= Google::Protobuf::FFI.get_is_packed(self)
+      end
+
       # @param msg [Google::Protobuf::Message]
       def clear(msg)
         if msg.class.descriptor != Google::Protobuf::FFI.get_containing_message_def(self)
@@ -304,6 +312,7 @@
       attach_function :get_default,                :upb_FieldDef_Default,               [FieldDescriptor], MessageValue.by_value
       attach_function :get_subtype_as_enum,        :upb_FieldDef_EnumSubDef,            [FieldDescriptor], EnumDescriptor
       attach_function :get_has_presence,           :upb_FieldDef_HasPresence,           [FieldDescriptor], :bool
+      attach_function :get_is_packed,              :upb_FieldDef_IsPacked,              [FieldDescriptor], :bool
       attach_function :is_map,                     :upb_FieldDef_IsMap,                 [FieldDescriptor], :bool
       attach_function :is_repeated,                :upb_FieldDef_IsRepeated,            [FieldDescriptor], :bool
       attach_function :is_sub_message,             :upb_FieldDef_IsSubMessage,          [FieldDescriptor], :bool
diff --git a/ruby/lib/google/protobuf/ffi/file_descriptor.rb b/ruby/lib/google/protobuf/ffi/file_descriptor.rb
index f1da9f7..2035b98 100644
--- a/ruby/lib/google/protobuf/ffi/file_descriptor.rb
+++ b/ruby/lib/google/protobuf/ffi/file_descriptor.rb
@@ -10,7 +10,6 @@
     class FFI
       # FileDescriptor
       attach_function :file_def_name,   :upb_FileDef_Name,   [:FileDef], :string
-      attach_function :file_def_syntax, :upb_FileDef_Syntax, [:FileDef], Syntax
       attach_function :file_def_pool,   :upb_FileDef_Pool,   [:FileDef], :DefPool
       attach_function :file_options,    :FileDescriptor_serialized_options,  [:FileDef, :pointer, Internal::Arena], :pointer
     end
@@ -31,17 +30,6 @@
         "#{self.class.name}: #{name}"
       end
 
-      def syntax
-        case Google::Protobuf::FFI.file_def_syntax(@file_def)
-        when :Proto3
-          :proto3
-        when :Proto2
-          :proto2
-        else
-          nil
-        end
-      end
-
       def name
         Google::Protobuf::FFI.file_def_name(@file_def)
       end
diff --git a/ruby/src/main/java/com/google/protobuf/jruby/RubyFileDescriptor.java b/ruby/src/main/java/com/google/protobuf/jruby/RubyFileDescriptor.java
index db9580d..ff3c6d9 100644
--- a/ruby/src/main/java/com/google/protobuf/jruby/RubyFileDescriptor.java
+++ b/ruby/src/main/java/com/google/protobuf/jruby/RubyFileDescriptor.java
@@ -86,27 +86,6 @@
     return name == null ? context.nil : context.runtime.newString(name);
   }
 
-  /*
-   * call-seq:
-   *     FileDescriptor.syntax => syntax
-   *
-   * Returns this file descriptors syntax.
-   *
-   * Valid syntax versions are:
-   *     :proto2 or :proto3.
-   */
-  @JRubyMethod(name = "syntax")
-  public IRubyObject getSyntax(ThreadContext context) {
-    switch (LegacyFileDescriptor.getSyntax(fileDescriptor)) {
-      case PROTO2:
-        return context.runtime.newSymbol("proto2");
-      case PROTO3:
-        return context.runtime.newSymbol("proto3");
-      default:
-        return context.nil;
-    }
-  }
-
   @JRubyMethod
   public IRubyObject options(ThreadContext context) {
     RubyDescriptorPool pool = (RubyDescriptorPool) RubyDescriptorPool.generatedPool(null, null);
diff --git a/ruby/tests/basic.rb b/ruby/tests/basic.rb
index 46e3fec..e6cd08b 100755
--- a/ruby/tests/basic.rb
+++ b/ruby/tests/basic.rb
@@ -553,12 +553,10 @@
       file_descriptor = TestMessage.descriptor.file_descriptor
       refute_nil file_descriptor
       assert_equal "basic_test.proto", file_descriptor.name
-      assert_equal :proto3, file_descriptor.syntax
 
       file_descriptor = TestEnum.descriptor.file_descriptor
       refute_nil file_descriptor
       assert_equal "basic_test.proto", file_descriptor.name
-      assert_equal :proto3, file_descriptor.syntax
     end
 
     def test_map_freeze
@@ -639,6 +637,17 @@
       end
     end
 
+    def test_has_presence
+      assert_true TestMessage.descriptor.lookup("optional_int32").has_presence?
+      assert_false TestMessage.descriptor.lookup("repeated_int32").has_presence?
+      assert_false TestSingularFields.descriptor.lookup("singular_int32").has_presence?
+    end
+
+    def test_is_packed
+      assert_false TestMessage.descriptor.lookup("optional_int32").is_packed?
+      assert_true TestMessage.descriptor.lookup("repeated_int32").is_packed?
+    end
+
     def test_file_descriptor_options
       file_descriptor = TestMessage.descriptor.file_descriptor
 
diff --git a/ruby/tests/basic_proto2.rb b/ruby/tests/basic_proto2.rb
index 3864756..e9fce57 100755
--- a/ruby/tests/basic_proto2.rb
+++ b/ruby/tests/basic_proto2.rb
@@ -231,12 +231,10 @@
       file_descriptor = TestMessage.descriptor.file_descriptor
       refute_nil file_descriptor
       assert_equal "basic_test_proto2.proto", file_descriptor.name
-      assert_equal :proto2, file_descriptor.syntax
 
       file_descriptor = TestEnum.descriptor.file_descriptor
       refute_nil file_descriptor
       assert_equal "basic_test_proto2.proto", file_descriptor.name
-      assert_equal :proto2, file_descriptor.syntax
     end
 
     def test_oneof_fields_respond_to? # regression test for issue 9202
@@ -254,6 +252,11 @@
       refute msg.has_d?
     end
 
+    def test_is_packed
+      assert_false TestMessage.descriptor.lookup("optional_int32").is_packed?
+      assert_false TestMessage.descriptor.lookup("repeated_int32").is_packed?
+    end
+
     def test_extension
       message = TestExtensions.new
       extension = Google::Protobuf::DescriptorPool.generated_pool.lookup 'basic_test_proto2.optional_int32_extension'
diff --git a/upb/reflection/field_def.h b/upb/reflection/field_def.h
index 35c3e70..b7f3427 100644
--- a/upb/reflection/field_def.h
+++ b/upb/reflection/field_def.h
@@ -42,7 +42,7 @@
 bool upb_FieldDef_IsExtension(const upb_FieldDef* f);
 UPB_API bool upb_FieldDef_IsMap(const upb_FieldDef* f);
 bool upb_FieldDef_IsOptional(const upb_FieldDef* f);
-bool upb_FieldDef_IsPacked(const upb_FieldDef* f);
+UPB_API bool upb_FieldDef_IsPacked(const upb_FieldDef* f);
 bool upb_FieldDef_IsPrimitive(const upb_FieldDef* f);
 UPB_API bool upb_FieldDef_IsRepeated(const upb_FieldDef* f);
 bool upb_FieldDef_IsRequired(const upb_FieldDef* f);
