# app.thatsit.typing.session

> One practice session: the span between two silences. Keystrokes are never stored individually.

- Kind: record
- Record key: tid
- Authority: typing.thatsit.app
- Lexicon: 1
- Published by [thatsit.dev](https://lexicon.garden/identity/did:plc:tr7zlhacx3fete5s7cx5tyjd), the NSID's authority

## Links

- [Documentation](https://lexicon.garden/lexicon/did:plc:tr7zlhacx3fete5s7cx5tyjd/app.thatsit.typing.session)
- [Schema JSON](https://lexicon.garden/lexicon/did:plc:tr7zlhacx3fete5s7cx5tyjd/app.thatsit.typing.session/schema.json)
- [Analytics](https://lexicon.garden/lexicon/did:plc:tr7zlhacx3fete5s7cx5tyjd/app.thatsit.typing.session/analytics)

## Record (`app.thatsit.typing.session`)

Type: record · key tid

### Properties

- `chars` (integer, required)
- `errors` (integer, required)
- `layout` (string, required)
  - Constraints: maxGraphemes: 100
- `ms` (integer, required)
- `stats` (ref, required)
  - Reference: `app.thatsit.typing.defs#keyStats`

## Schema

```json
{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "main": {
      "description": "One practice session: the span between two silences. Keystrokes are never stored individually.",
      "key": "tid",
      "record": {
        "properties": {
          "chars": {
            "type": "integer"
          },
          "errors": {
            "type": "integer"
          },
          "layout": {
            "maxGraphemes": 100,
            "type": "string"
          },
          "ms": {
            "type": "integer"
          },
          "stats": {
            "ref": "app.thatsit.typing.defs#keyStats",
            "type": "ref"
          }
        },
        "required": [
          "layout",
          "chars",
          "errors",
          "ms",
          "stats"
        ],
        "type": "object"
      },
      "type": "record"
    }
  },
  "id": "app.thatsit.typing.session",
  "lexicon": 1
}
```
