Class variables are associated to classes instead of instances. They are prefixed with two "at" signs (@@). For example:
class Counter
  @@instances = 0
  def initialize
    @@instances += 1
  end
  def self.instances
    @@instances
  end
end
Counter.instances #=> 0
Counter.new
Counter.new
Counter.new
Counter.instances #=> 3
Class variables can be read and written from class methods or instance methods.
Their type is inferred using the global type inference algorithm.
Class variables are always associated to a single type and are not inherited:
class Parent
  @@counter = 0
end
class Child < Parent
  def self.counter
    # Error, can't infer the type of class variable
    # '@@counter' of Child
    @@counter
  end
end
Class variables can also be associated to modules and structs. Like above, they are not inherited by including types.