- FRC Game Manual
- FRC Game Q&A

# NetworkTables Tables and Topics

## Using the NetworkTable Class

The `NetworkTable` (Java, C++, `Python`) class is an API abstraction that represents a single “folder” (or “table”) of topics as described in NetworkTables Organization. The NetworkTable class stores the base path to the table and provides functions to get topics within the table, automatically prepending the table path.

## Getting a Topic

A `Topic` (Java, C++, `Python`) object (or `NT_Topic` handle) represents a topic. This has a 1:1 correspondence with the topic’s name, and will not change as long as the instance exists. Unlike publishers and subscribers, it is not necessary to store a Topic object.

Having a Topic object or handle does not mean the topic exists or is of the correct type. For convenience when creating publishers and subscribers, there are type-specific Topic classes (e.g. `BooleanTopic`: Java, C++, `Python`), but there is no check at the Topic level to ensure that the topic’s type actually matches. The preferred method to get a type-specific topic to call the appropriate type-specific getter, but it’s also possible to directly convert a generic Topic into a type-specific Topic class. Note: the handle-based API does not have a concept of type-specific classes.

Java

    NetworkTableInstance inst = NetworkTableInstance.getDefault();
    NetworkTable table = inst.getTable("datatable");
    // get a topic from a NetworkTableInstance
    // the topic name in this case is the full name
    DoubleTopic dblTopic = inst.getDoubleTopic("/datatable/X");
    // get a topic from a NetworkTable
    // the topic name in this case is the name within the table;
    // this line and the one above reference the same topic
    DoubleTopic dblTopic = table.getDoubleTopic("X");
    // get a type-specific topic from a generic Topic
    Topic genericTopic = inst.getTopic("/datatable/X");
    DoubleTopic dblTopic = new DoubleTopic(genericTopic);

C++

    nt::NetworkTableInstance inst = nt::NetworkTableInstance::GetDefault();
    std::shared_ptr<nt::NetworkTable> table = inst.GetTable("datatable");
    // get a topic from a NetworkTableInstance
    // the topic name in this case is the full name
    nt::DoubleTopic dblTopic = inst.GetDoubleTopic("/datatable/X");
    // get a topic from a NetworkTable
    // the topic name in this case is the name within the table;
    // this line and the one above reference the same topic
    nt::DoubleTopic dblTopic = table->GetDoubleTopic("X");
    // get a type-specific topic from a generic Topic
    nt::Topic genericTopic = inst.GetTopic("/datatable/X");
    nt::DoubleTopic dblTopic{genericTopic};

C++ (Handle-based)

    NT_Instance inst = nt::GetDefaultInstance();
    // get a topic from a NetworkTableInstance
    NT_Topic topic = nt::GetTopic(inst, "/datatable/X");

C

    NT_Instance inst = NT_GetDefaultInstance();
    // get a topic from a NetworkTableInstance
    NT_Topic topic = NT_GetTopic(inst, "/datatable/X");

Python

    import ntcore
    inst = ntcore.NetworkTableInstance.getDefault()
    table = inst.getTable("datatable")
    # get a topic from a NetworkTableInstance
    # the topic name in this case is the full name
    dblTopic = inst.getDoubleTopic("/datatable/X")
    # get a topic from a NetworkTable
    # the topic name in this case is the name within the table;
    # this line and the one above reference the same topic
    dblTopic = table.getDoubleTopic("X")
    # get a type-specific topic from a generic Topic
    genericTopic = inst.getTopic("/datatable/X")
    dblTopic = ntcore.DoubleTopic(genericTopic)