user4172: Is there a size limit on transaction metadata?
If there is a limit, is it varying or fixed size?

user2092: Values change, so this is safe for the current parameters:
  $ cardano-cli query protocol-parameters --mainnet | jq .maxTxSize
  16384

But these are in flux, so you can try to be mindful of upcoming changes. Metadata is so versatile that if it didn't get larger there would probably be a way to deal with this, but it's in as much flux as many of the other pool parameters.
I don't know the best way to stay on top of these changes.

user4023: At the moment maxTxSize = 16384 bytes (including metadata).
If we talk about the max number of characters in a 16 KB text file with UTF-8 encoding (8-bit), then this is 16384 characters, since each character weighs exactly 1 byte. This is more than enough, to describe transaction's body and add a reach metadata to it.

Here is an important note regarding Tx metadata:

There is no limit on the number of key-value pairs (except the overall transaction size limit) or on individual structured values. However, there is a limit on the size of text strings and byte strings within the structured values, which is implemented to mitigate the problem of unpleasant or illegal content being posted to the blockchain.


P.S.
During Basho era the size of Tx might be increased up to 512 KB.

4172: <p>Is there a size limit on transaction metadata?</p>
<p>If there is a limit, is it varying or fixed size?</p>
 2092: <p>Values change, so this is safe for the current parameters:</p>
<pre><code>  $ cardano-cli query protocol-parameters --mainnet | jq .maxTxSize
  16384
</code></pre>
<p>But these are in flux, so you can try to be mindful of upcoming changes. Metadata is so versatile that if it didn't get larger there would probably be a way to deal with this, but it's in as much flux as many of the other pool parameters.</p>
<p>I don't know the best way to stay on top of these changes.</p>
 4023: <p>At the moment <a href="https://github.com/cardano-foundation/CIPs/blob/master/CIP-0009/README.md" rel="nofollow noreferrer">maxTxSize = 16384 bytes</a> (including metadata).</p>
<p>If we talk about the max number of characters in a 16 KB text file with UTF-8 encoding (8-bit), then this is 16384 characters, since each character weighs exactly 1 byte. This is more than enough, to describe transaction's body and add a reach metadata to it.</p>
<hr />
<p>Here is an important note regarding <a href="https://github.com/input-output-hk/cardano-node/blob/master/doc/reference/tx-metadata.md" rel="nofollow noreferrer">Tx metadata</a>:</p>
<blockquote>
<p>There is no limit on the number of key-value pairs (<em><strong>except the overall transaction size limit</strong></em>) or on individual structured values. However, there is a limit on the size of text strings and byte strings within the structured values, which is implemented to mitigate the problem of unpleasant or illegal content being posted to the blockchain.</p>
</blockquote>
<hr />
<p>P.S.</p>
<p><em>During Basho era the size of Tx might be increased <a href="https://www.reddit.com/r/cardano/comments/pizeeu/the_real_issue_with_cardano_is_16_kb_tx_size_limit/" rel="nofollow noreferrer">up to 512 KB</a></em>.</p>
