diff --git a/NanoID.cabal b/NanoID.cabal
--- a/NanoID.cabal
+++ b/NanoID.cabal
@@ -1,5 +1,5 @@
 name:                NanoID
-version:             1.2.0
+version:             2.0.0
 synopsis:            NanoID generator
 description:         Library and CLI tool for NanoID generation
 license:             BSD3
@@ -20,9 +20,9 @@
 
 library
   exposed-modules:     Data.NanoID
-  build-depends:       base       >= 4.7 && < 4.16
+  build-depends:       base       >= 4.7  && < 4.16
                      , bytestring >= 0.10 && < 0.12
-                     , extra      >= 1.6 && < 1.8
+                     , extra      >= 1.6  && < 1.8
                      , mwc-random >= 0.13 && < 0.16
   hs-source-dirs:      src
   default-language:    Haskell2010
@@ -30,7 +30,7 @@
 executable nanoid
   main-is:             Main.hs
   other-modules:       Options
-  build-depends:       base                 >= 4.7 && < 4.16
+  build-depends:       base                 >= 4.7  && < 4.16
                      , bytestring           >= 0.10 && < 0.12
                      , mwc-random           >= 0.13 && < 0.16
                      , NanoID
diff --git a/ReadMe.md b/ReadMe.md
--- a/ReadMe.md
+++ b/ReadMe.md
@@ -2,7 +2,7 @@
 
 ```
 [user@box ~] $ nanoid -h
-nanoid v1.0.1, (c) Michel Boucey 2021
+nanoid v2.0.0, (c) Michel Boucey 2021
 
 Usage: nanoid [-a|--alphabet ARG] [-l|--length ARG] [-q|--quantity ARG] 
               [-n|--newline]
diff --git a/app/Main.hs b/app/Main.hs
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -13,12 +13,12 @@
 main :: IO ()
 main = do
   Options{..} <- execParser opts
-  if length > 21
-    then putStrLn "The length of NanoID is less or equal to 21" >> exitFailure
+  if length < 1 
+    then putStrLn "Strange (nano)idea... less than one char" >> exitFailure
     else do
       let alphabet' = Alphabet { unAlphabet = C.pack alphabet }
       replicateM_ quantity $
-        createSystemRandom >>= customNanoID alphabet' length >>= putNanoID newline
+        createSystemRandom >>= customNanoID alphabet' (Just length) >>= putNanoID newline
       exitSuccess
         where
           putNanoID nl = either (put nl . C.pack) (put nl . unNanoID)
diff --git a/src/Data/NanoID.hs b/src/Data/NanoID.hs
--- a/src/Data/NanoID.hs
+++ b/src/Data/NanoID.hs
@@ -2,6 +2,7 @@
 
 import           Control.Monad
 import qualified Data.ByteString.Char8 as C
+import           Data.Maybe
 import           System.Random.MWC
 
 newtype NanoID = NanoID { unNanoID :: C.ByteString } deriving (Eq, Show)
@@ -10,18 +11,41 @@
 
 type Length = Int
 
-defaultAlphabet :: Alphabet
-defaultAlphabet = Alphabet (C.pack "ABCDEFGHIJKLMNOPKRSTUVWXYZ_-abcdefghijklmnopqrstuvwxyz")
-
 nanoID :: IO (Either String NanoID)
-nanoID = createSystemRandom >>= customNanoID defaultAlphabet 21
+nanoID = createSystemRandom >>= customNanoID defaultAlphabet Nothing
 
-customNanoID :: Alphabet -> Length -> GenIO-> IO (Either String NanoID)
+customNanoID :: Alphabet -> Maybe Length -> GenIO-> IO (Either String NanoID)
 customNanoID a l g =
-  if l > 21
-    then return (Left "The length of NanoID is less or equal to 21")
-    else do
-      let acs = unAlphabet a
-          al = C.length acs
-      pure . NanoID . C.pack <$> replicateM l ((\r -> C.index acs (r-1)) <$> uniformR (1,al) g)
+  let ua = unAlphabet a
+      al = C.length ua in
+  pure . NanoID . C.pack <$> replicateM (fromMaybe 21 l) ((\r -> C.index ua (r-1)) <$> uniformR (1,al) g)
+
+-- | The default 'Alphabet', made of URL-friendly symbols.
+defaultAlphabet :: Alphabet
+defaultAlphabet = Alphabet (C.pack "ABCDEFGHIJKLMNOPKRSTUVWXYZ_1234567890-abcdefghijklmnopqrstuvwxyz")
+
+-- | Predefined 'Alphabet's borrowed from <https://github.com/CyberAP/nanoid-dictionary>
+numbers :: Alphabet
+numbers = Alphabet (C.pack "1234567890")
+
+hexadecimalLowercase :: Alphabet
+hexadecimalLowercase = Alphabet (C.pack "0123456789abcdef")
+
+hexadecimalUppercase :: Alphabet
+hexadecimalUppercase = Alphabet (C.pack "0123456789ABCDEF")
+
+lowercase :: Alphabet
+lowercase = Alphabet (C.pack "abcdefghijklmnopqrstuvwxyz")
+
+uppercase :: Alphabet
+uppercase = Alphabet (C.pack "ABCDEFGHIJKLMNOPQRSTUVWXYZ")
+
+alphanumeric :: Alphabet
+alphanumeric = Alphabet (C.pack "ABCDEFGHIJKLMNOPKRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz")
+
+nolookalikes :: Alphabet
+nolookalikes = Alphabet (C.pack "346789ABCDEFGHJKLMNPQRTUVWXYabcdefghijkmnpqrtwxyz")
+
+nolookalikesSafe :: Alphabet
+nolookalikesSafe = Alphabet (C.pack "6789ABCDEFGHJKLMNPQRTUWYabcdefghijkmnpqrtwyz")
 
