Skip to content


Repository files navigation


CI npm version js-standard-style

Serialize according to the Accept header. Supports Fastify versions ^4.0.0


npm i @fastify/accepts-serializer


const protobuf = require('protobufjs')
const YAML = require('yamljs')
const msgpack = require('msgpack5')()

const root = protobuf.loadSync('test/awesome.proto')
const AwesomeMessage = root.lookupType('awesomepackage.AwesomeMessage')

let fastify = require('fastify')()

// Global serializers
fastify.register(require('@fastify/accepts-serializer'), {
  serializers: [
      regex: /^application\/yaml$/,
      serializer: body => YAML.stringify(body)
      regex: /^application\/x-msgpack$/,
      serializer: body => msgpack.encode(body)
  default: 'application/yaml' // MIME type used if Accept header don't match anything

// Per-router serializers
const config = {
  serializers: [
      regex: /^application\/x-protobuf$/,
      serializer: body => AwesomeMessage.encode(AwesomeMessage.create(body)).finish()

fastify.get('/request', { config }, function (req, reply) {
  reply.send({pippo: 'pluto'})


For each route, a SerializerManager is defined, which has both per-route and global serializer definitions.

The MIME type application/json is always handled by fastify if no serializer is registered for that MIME type.

If no default key is specified in configuration, all requests with an unknown Accept header will be replied to with a 406 response (a boom error is used).