Can I update fields with the @id directive?

You can update the data using a DQL mutation. If you don’t have the uid mapped in GraphQL using ID then you can do an upsert using your field with @id.

type User {
  username: String @id
  isActive: Boolean
}
upsert {
  query {
    user as var(func: eq(User.username,"foo"))
  }
  mutation {
    set {
      uid(user) <User.username> "bar" .
    }
  }
}