diff --git a/ChangeLog.md b/ChangeLog.md
new file mode 100644
--- /dev/null
+++ b/ChangeLog.md
@@ -0,0 +1,3 @@
+2.0.0.0
+-------
+* Initial release
diff --git a/Data/Vector/Fixed/Instances/Aeson.hs b/Data/Vector/Fixed/Instances/Aeson.hs
new file mode 100644
--- /dev/null
+++ b/Data/Vector/Fixed/Instances/Aeson.hs
@@ -0,0 +1,107 @@
+{-# LANGUAGE DerivingVia          #-}
+{-# LANGUAGE FlexibleContexts     #-}
+{-# LANGUAGE ScopedTypeVariables  #-}
+{-# LANGUAGE StandaloneDeriving   #-}
+{-# LANGUAGE TypeFamilies         #-}
+{-# LANGUAGE UndecidableInstances #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+-- | Module with @aeson@ instances for data types defined in fixed
+--   vector
+module Data.Vector.Fixed.Instances.Aeson
+  ( fixedVectorParseJSON
+  , fixedVectorToJSON
+  , fixedVectorToEncoding
+  ) where
+
+import Control.Monad
+import Control.Monad.ST
+import           Data.Vector.Fixed             (Arity,ArityPeano,ViaFixed(..),Vector)
+import qualified Data.Vector.Fixed           as F
+import qualified Data.Vector.Fixed.Boxed     as FB
+import qualified Data.Vector.Fixed.Strict    as FF
+import qualified Data.Vector.Fixed.Unboxed   as FU
+import qualified Data.Vector.Fixed.Primitive as FP
+import qualified Data.Vector.Fixed.Storable  as FS
+import           Data.Aeson
+import           Data.Aeson.Types
+
+import qualified Data.Vector as V
+import qualified Data.Vector.Mutable as MV
+
+
+----------------------------------------------------------------
+-- Generic implementations
+----------------------------------------------------------------
+
+-- | Generic implementation of 'parseJSON' for data types which are
+--   instances of 'Vector'.
+fixedVectorParseJSON :: forall v a. (Vector v a, FromJSON a) => Value -> Parser (v a)
+{-# INLINE fixedVectorParseJSON #-}
+fixedVectorParseJSON = withArray "fixed-vector" $ \arr -> do
+  let expected = F.length (undefined :: v a)
+  when (V.length arr /= expected) $
+    fail $ "Expecting array of length " ++ show expected
+  F.generateM $ \i -> parseJSON (arr V.! i)
+
+-- | Generic implementation of 'toJSON' for data types which are
+--   instances of 'Vector'.
+fixedVectorToJSON :: forall v a. (Vector v a, ToJSON a) => v a -> Value
+{-# INLINE fixedVectorToJSON #-}
+fixedVectorToJSON v = Array $ runST $ do
+  -- NOTE: (!) from fixed vector could have O(n) complexity so let
+  --       fold over fixed vector. Access to vector _is_ O(1)
+  vec <- MV.unsafeNew n
+  flip F.imapM_ v $ \i a -> MV.unsafeWrite vec i (toJSON a)
+  V.unsafeFreeze vec
+  where
+    n = F.length v
+
+-- | Generic implementation of 'toEncoding' for data types which are
+--   instances of 'Vector'.
+fixedVectorToEncoding :: forall v a. (Vector v a, ToJSON a) => v a -> Encoding
+{-# INLINE fixedVectorToEncoding #-}
+fixedVectorToEncoding = foldable . F.cvec
+
+
+----------------------------------------------------------------
+-- Instances
+----------------------------------------------------------------
+
+instance (Vector v a, FromJSON a) => FromJSON (ViaFixed v a) where
+  {-# INLINE parseJSON #-}
+  parseJSON = fixedVectorParseJSON
+
+instance (Vector v a, ToJSON a) => ToJSON (ViaFixed v a) where
+  toJSON     = fixedVectorToJSON
+  toEncoding = fixedVectorToEncoding
+  {-# INLINE toJSON     #-}
+  {-# INLINE toEncoding #-}
+
+
+
+deriving via ViaFixed (FB.Vec n) a instance (Arity n, FromJSON a)                => FromJSON (FB.Vec n a)
+deriving via ViaFixed (FB.Vec n) a instance (Arity n, ToJSON   a)                => ToJSON   (FB.Vec n a)
+deriving via ViaFixed (FF.Vec n) a instance (Arity n, FromJSON a)                => FromJSON (FF.Vec n a)
+deriving via ViaFixed (FF.Vec n) a instance (Arity n, ToJSON   a)                => ToJSON   (FF.Vec n a)
+deriving via ViaFixed (FP.Vec n) a instance (Arity n, FromJSON a, FP.Prim a)     => FromJSON (FP.Vec n a)
+deriving via ViaFixed (FP.Vec n) a instance (Arity n, ToJSON   a, FP.Prim a)     => ToJSON   (FP.Vec n a)
+deriving via ViaFixed (FS.Vec n) a instance (Arity n, FromJSON a, FS.Storable a) => FromJSON (FS.Vec n a)
+deriving via ViaFixed (FS.Vec n) a instance (Arity n, ToJSON   a, FS.Storable a) => ToJSON   (FS.Vec n a)
+deriving via ViaFixed (FU.Vec n) a instance (Arity n, FromJSON a, FU.Unbox n a)  => FromJSON (FU.Vec n a)
+deriving via ViaFixed (FU.Vec n) a instance (Arity n, ToJSON   a, FU.Unbox n a)  => ToJSON   (FU.Vec n a)
+
+deriving via ViaFixed (F.VecList  n) a instance (Arity n,      FromJSON a) => FromJSON (F.VecList  n a)
+deriving via ViaFixed (F.VecList  n) a instance (Arity n,      ToJSON   a) => ToJSON   (F.VecList  n a)
+deriving via ViaFixed (F.VecPeano n) a instance (ArityPeano n, FromJSON a) => FromJSON (F.VecPeano n a)
+deriving via ViaFixed (F.VecPeano n) a instance (ArityPeano n, ToJSON   a) => ToJSON   (F.VecPeano n a)
+
+deriving via ViaFixed F.Only a instance (FromJSON a) => FromJSON (F.Only a)
+deriving via ViaFixed F.Only a instance (ToJSON   a) => ToJSON   (F.Only a)
+
+instance FromJSON (F.Empty a) where
+  parseJSON = withArray "fixed-vector: Empty" $ \arr -> do
+    unless (V.null arr) $ fail "Nonempty array"
+    pure F.Empty
+instance ToJSON (F.Empty a) where
+  toJSON     _ = Array V.empty
+  toEncoding _ = toEncoding ([]::[Value])
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+Copyright (c) Aleksey Khudyakov
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the author nor the names of his contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
diff --git a/fixed-vector-aeson.cabal b/fixed-vector-aeson.cabal
new file mode 100644
--- /dev/null
+++ b/fixed-vector-aeson.cabal
@@ -0,0 +1,40 @@
+Name:           fixed-vector-aeson
+Version:        2.0.0.0
+Synopsis:       Aeson instances for fixed-vector
+Description:
+  This package contains FromJSON and ToJSON instances for data types defined in
+  fixed-vector package.
+  
+Cabal-Version:  >= 1.10
+License:        BSD3
+License-File:   LICENSE
+Author:         Aleksey Khudyakov <alexey.skladnoy@gmail.com>
+Maintainer:     Aleksey Khudyakov <alexey.skladnoy@gmail.com>
+Bug-reports:    https://github.com/Shimuuar/fixed-vector/issues
+Category:       Data
+Build-Type:     Simple
+extra-source-files:
+  ChangeLog.md
+
+tested-with:
+    GHC ==8.10.7
+     || ==9.0.1
+     || ==9.2.8
+     || ==9.4.7
+     || ==9.6.6
+     || ==9.8.2
+     || ==9.10.1
+
+source-repository head
+  type:     git
+  location: http://github.com/Shimuuar/fixed-vector
+
+Library
+  Ghc-options:          -Wall
+  Default-Language:     Haskell2010
+  Build-Depends:        base         >=4.14 && <5
+                      , fixed-vector >=2.0
+                      , aeson        >=2
+                      , vector
+  Exposed-modules:
+    Data.Vector.Fixed.Instances.Aeson
