diff --git a/lib/utils/reserved-users.js b/lib/utils/reserved-users.js
--- a/lib/utils/reserved-users.js
+++ b/lib/utils/reserved-users.js
@@ -1,8 +1,7 @@
 // @flow
 
 // All entries in this list must be lowercase and must also be included in
-// `services/identity/reserved_usernames.json` and in
-// `services/blob/reserved_usernames.json`!!
+// `shared/comm-lib/shared/reserved_usernames.json`!!
 const reservedUsernamesSet: $ReadOnlySet<string> = new Set([
   // Additional Reserved Keywords
   'comm',
diff --git a/services/blob/Cargo.lock b/services/blob/Cargo.lock
--- a/services/blob/Cargo.lock
+++ b/services/blob/Cargo.lock
@@ -1107,6 +1107,7 @@
  "grpc_clients",
  "hex",
  "http",
+ "once_cell",
  "rand",
  "serde",
  "serde_json",
diff --git a/services/blob/src/config.rs b/services/blob/src/config.rs
--- a/services/blob/src/config.rs
+++ b/services/blob/src/config.rs
@@ -68,17 +68,6 @@
   config_builder.load().await
 }
 
-fn get_all_reserved_invite_links() -> HashSet<String> {
-  // All entries in `reserved_usernames.json` must be lowercase and must also be
-  // included in `lib/utils/reserved-users.js`!!
-  let contents = include_str!("../reserved_usernames.json");
-  let reserved_usernames: Vec<String> = serde_json::from_str(contents).unwrap();
-
-  reserved_usernames.into_iter().collect()
-}
-pub static RESERVED_INVITE_LINKS: Lazy<HashSet<String>> =
-  Lazy::new(get_all_reserved_invite_links);
-
 fn get_all_offensive_invite_links() -> HashSet<String> {
   let contents = include_str!("../third-party/bad-words/words.json");
   let reserved_usernames: Vec<String> = serde_json::from_str(contents).unwrap();
diff --git a/services/blob/src/service.rs b/services/blob/src/service.rs
--- a/services/blob/src/service.rs
+++ b/services/blob/src/service.rs
@@ -7,13 +7,14 @@
 use async_stream::try_stream;
 use chrono::Duration;
 use comm_lib::http::ByteStream;
+use comm_lib::shared::reserved_users::RESERVED_USERNAME_SET;
 use comm_lib::tools::BoxedError;
 use once_cell::sync::Lazy;
 use tokio_stream::StreamExt;
 use tonic::codegen::futures_core::Stream;
 use tracing::{debug, error, info, trace, warn};
 
-use crate::config::{CONFIG, OFFENSIVE_INVITE_LINKS, RESERVED_INVITE_LINKS};
+use crate::config::{CONFIG, OFFENSIVE_INVITE_LINKS};
 use crate::constants::{
   INVITE_LINK_BLOB_HASH_PREFIX, S3_MULTIPART_UPLOAD_MINIMUM_CHUNK_SIZE,
 };
@@ -138,7 +139,7 @@
     invite_secret: &str,
   ) -> Result<(), BlobServiceError> {
     let lowercase_secret = invite_secret.to_lowercase();
-    if (RESERVED_INVITE_LINKS.contains(&lowercase_secret)) {
+    if (RESERVED_USERNAME_SET.contains(&lowercase_secret)) {
       debug!("Reserved invite link");
       return Err(BlobServiceError::InviteLinkError(InviteLinkError::Reserved));
     }
diff --git a/services/identity/Cargo.lock b/services/identity/Cargo.lock
--- a/services/identity/Cargo.lock
+++ b/services/identity/Cargo.lock
@@ -851,6 +851,7 @@
  "derive_more",
  "grpc_clients",
  "hex",
+ "once_cell",
  "rand 0.8.5",
  "serde",
  "serde_json",
diff --git a/services/identity/reserved_usernames.json b/services/identity/reserved_usernames.json
deleted file mode 100644
--- a/services/identity/reserved_usernames.json
+++ /dev/null
@@ -1,2223 +0,0 @@
-[
-  "comm",
-  "dapp-tools",
-  "dapp_tools",
-  "ethers-js",
-  "ethers_js",
-  "ganache-cli",
-  "ganache_cli",
-  "hardhat",
-  "mod",
-  "moderator",
-  "solidity",
-  "truffle",
-  "web3",
-  "web3modal",
-  "0",
-  "12",
-  "49",
-  "478",
-  "1hive",
-  "aave",
-  "agoraspace",
-  "aladdindao",
-  "alchemistdao",
-  "allships",
-  "ampled",
-  "angeldao",
-  "aragon",
-  "badgerdao",
-  "bankless",
-  "bardao",
-  "bayc",
-  "beetsdao",
-  "braintrust",
-  "bright",
-  "brightid",
-  "brightmomentsgallery",
-  "brrdao",
-  "cabindao",
-  "canudao",
-  "cedge",
-  "clip",
-  "closerdao",
-  "coinvise",
-  "collab-land",
-  "collab_land",
-  "colony",
-  "comp",
-  "compound",
-  "coordinape",
-  "cre8club",
-  "crisisdao",
-  "cspdao",
-  "daohaus",
-  "daosquare",
-  "daostack",
-  "darkstardao",
-  "decred",
-  "developerdao",
-  "devs",
-  "dfdao",
-  "dinnerdao",
-  "dinogangz",
-  "discodao",
-  "distributed-town",
-  "distributed_town",
-  "divineroles",
-  "dopewarsdao",
-  "dorg",
-  "duckdao",
-  "dxdao",
-  "edendao",
-  "elektradao",
-  "ethernautdao",
-  "etherscan",
-  "evewealth",
-  "ff",
-  "fiatluxdao",
-  "fingerprints",
-  "fireeyes",
-  "flamingodao",
-  "forefront",
-  "freecompany",
-  "friendswithbenefits",
-  "fwb",
-  "gardens",
-  "gcr",
-  "genezisbiohacking",
-  "genre",
-  "geometrydao",
-  "gitcoin",
-  "gnosis",
-  "gnosissafe",
-  "gorn",
-  "gornhegemonydao",
-  "gremlins",
-  "guildhall",
-  "habitat",
-  "heatdao",
-  "herstorydao",
-  "honeydao",
-  "idlefinance",
-  "indexcoop",
-  "insuredao",
-  "jennydao",
-  "joystream",
-  "jumperdao",
-  "keeperdao",
-  "kleoverse",
-  "komorebicollective",
-  "krause",
-  "krausehouse",
-  "learndao",
-  "leavingrecords",
-  "lex",
-  "lexdao",
-  "llama",
-  "lovesocietydao",
-  "lurkerdao",
-  "magnetdao",
-  "makerdao",
-  "maodao",
-  "maskdao",
-  "meebitsdao",
-  "meritcircle",
-  "metacartel",
-  "metafam",
-  "metagammadelta",
-  "metamask",
-  "metaversedao",
-  "minty",
-  "mirror-xyz",
-  "mirror_xyz",
-  "mirrorclubdao",
-  "molochdao",
-  "moonshotcollective",
-  "moshdao",
-  "muse0",
-  "nebo",
-  "neptunedao",
-  "nfdao",
-  "nounsdao",
-  "olympusdao",
-  "opendao",
-  "opensea",
-  "opolis",
-  "orcaprotocol",
-  "pacdao",
-  "paperclip",
-  "parcel",
-  "party",
-  "partydao",
-  "peerion",
-  "phlotedao",
-  "physicalanddigitalartaficionados",
-  "pizzadao",
-  "pleasrdao",
-  "pokemontrainersclub",
-  "prints",
-  "proofofhumanity",
-  "prosperdao",
-  "proteindao",
-  "psydao",
-  "rabbithole",
-  "raidguild",
-  "rainbowwallet",
-  "raribledao",
-  "readyplayerdao",
-  "reddao",
-  "ref",
-  "retokendao",
-  "ribondao",
-  "rumblekong",
-  "sarcophagus",
-  "scribedao",
-  "seedclub",
-  "sharkdao",
-  "shinydao",
-  "snapshot",
-  "snx",
-  "sourcecred",
-  "spork",
-  "sporkdao",
-  "sputnik-fund",
-  "sputnik_fund",
-  "squaddao",
-  "squig",
-  "squiggle",
-  "stack",
-  "stackerventuresdao",
-  "syndicate",
-  "synthetix",
-  "tally",
-  "taodao",
-  "tarascadao",
-  "terrachess",
-  "thelao",
-  "thewipmeetup",
-  "thugdao",
-  "tinseldao",
-  "tokenwalkdao",
-  "tomomasterdao",
-  "triforcedao",
-  "trippy",
-  "trojandao",
-  "ultradao",
-  "universitydao",
-  "unlockdao",
-  "vectordao",
-  "viariodao",
-  "vita",
-  "vitadao",
-  "walletconnect",
-  "whalerdao",
-  "whiskeypioneers",
-  "yamdao",
-  "yearn",
-  "yfi",
-  "ygg",
-  "zouzoukwa",
-  "aaa",
-  "aarp",
-  "abarth",
-  "abb",
-  "abbott",
-  "abbvie",
-  "abc",
-  "able",
-  "abogado",
-  "abudhabi",
-  "ac",
-  "academy",
-  "accenture",
-  "accountant",
-  "accountants",
-  "aco",
-  "actor",
-  "ad",
-  "adac",
-  "ads",
-  "adult",
-  "ae",
-  "aeg",
-  "aero",
-  "aetna",
-  "af",
-  "afamilycompany",
-  "afl",
-  "africa",
-  "ag",
-  "agakhan",
-  "agency",
-  "ai",
-  "aig",
-  "airbus",
-  "airforce",
-  "airtel",
-  "akdn",
-  "al",
-  "alfaromeo",
-  "alibaba",
-  "alipay",
-  "allfinanz",
-  "allstate",
-  "ally",
-  "alsace",
-  "alstom",
-  "am",
-  "amazon",
-  "americanexpress",
-  "americanfamily",
-  "amex",
-  "amfam",
-  "amica",
-  "amsterdam",
-  "analytics",
-  "android",
-  "anquan",
-  "anz",
-  "ao",
-  "aol",
-  "apartments",
-  "app",
-  "apple",
-  "aq",
-  "aquarelle",
-  "ar",
-  "arab",
-  "aramco",
-  "archi",
-  "army",
-  "arpa",
-  "art",
-  "arte",
-  "as",
-  "asda",
-  "asia",
-  "associates",
-  "at",
-  "athleta",
-  "attorney",
-  "au",
-  "auction",
-  "audi",
-  "audible",
-  "audio",
-  "auspost",
-  "author",
-  "auto",
-  "autos",
-  "avianca",
-  "aw",
-  "aws",
-  "ax",
-  "axa",
-  "az",
-  "azure",
-  "ba",
-  "baby",
-  "baidu",
-  "banamex",
-  "bananarepublic",
-  "band",
-  "bank",
-  "bar",
-  "barcelona",
-  "barclaycard",
-  "barclays",
-  "barefoot",
-  "bargains",
-  "baseball",
-  "basketball",
-  "bauhaus",
-  "bayern",
-  "bb",
-  "bbc",
-  "bbt",
-  "bbva",
-  "bcg",
-  "bcn",
-  "bd",
-  "be",
-  "beats",
-  "beauty",
-  "beer",
-  "bentley",
-  "berlin",
-  "best",
-  "bestbuy",
-  "bet",
-  "bf",
-  "bg",
-  "bh",
-  "bharti",
-  "bi",
-  "bible",
-  "bid",
-  "bike",
-  "bing",
-  "bingo",
-  "bio",
-  "biz",
-  "bj",
-  "black",
-  "blackfriday",
-  "blockbuster",
-  "blog",
-  "bloomberg",
-  "blue",
-  "bm",
-  "bms",
-  "bmw",
-  "bn",
-  "bnpparibas",
-  "bo",
-  "boats",
-  "boehringer",
-  "bofa",
-  "bom",
-  "bond",
-  "boo",
-  "book",
-  "booking",
-  "bosch",
-  "bostik",
-  "boston",
-  "bot",
-  "boutique",
-  "box",
-  "br",
-  "bradesco",
-  "bridgestone",
-  "broadway",
-  "broker",
-  "brother",
-  "brussels",
-  "bs",
-  "bt",
-  "budapest",
-  "bugatti",
-  "build",
-  "builders",
-  "business",
-  "buy",
-  "buzz",
-  "bv",
-  "bw",
-  "by",
-  "bz",
-  "bzh",
-  "ca",
-  "cab",
-  "cafe",
-  "cal",
-  "call",
-  "calvinklein",
-  "cam",
-  "camera",
-  "camp",
-  "cancerresearch",
-  "canon",
-  "capetown",
-  "capital",
-  "capitalone",
-  "car",
-  "caravan",
-  "cards",
-  "care",
-  "career",
-  "careers",
-  "cars",
-  "casa",
-  "case",
-  "cash",
-  "casino",
-  "cat",
-  "catering",
-  "catholic",
-  "cba",
-  "cbn",
-  "cbre",
-  "cbs",
-  "cc",
-  "cd",
-  "center",
-  "ceo",
-  "cern",
-  "cf",
-  "cfa",
-  "cfd",
-  "cg",
-  "ch",
-  "chanel",
-  "channel",
-  "charity",
-  "chase",
-  "chat",
-  "cheap",
-  "chintai",
-  "christmas",
-  "chrome",
-  "church",
-  "ci",
-  "cipriani",
-  "circle",
-  "cisco",
-  "citadel",
-  "citi",
-  "citic",
-  "city",
-  "cityeats",
-  "ck",
-  "cl",
-  "claims",
-  "cleaning",
-  "click",
-  "clinic",
-  "clinique",
-  "clothing",
-  "cloud",
-  "club",
-  "clubmed",
-  "cm",
-  "cn",
-  "co",
-  "coach",
-  "codes",
-  "coffee",
-  "college",
-  "cologne",
-  "com",
-  "comcast",
-  "commbank",
-  "community",
-  "company",
-  "compare",
-  "computer",
-  "comsec",
-  "condos",
-  "construction",
-  "consulting",
-  "contact",
-  "contractors",
-  "cooking",
-  "cookingchannel",
-  "cool",
-  "coop",
-  "corsica",
-  "country",
-  "coupon",
-  "coupons",
-  "courses",
-  "cpa",
-  "cr",
-  "credit",
-  "creditcard",
-  "creditunion",
-  "cricket",
-  "crown",
-  "crs",
-  "cruise",
-  "cruises",
-  "csc",
-  "cu",
-  "cuisinella",
-  "cv",
-  "cw",
-  "cx",
-  "cy",
-  "cymru",
-  "cyou",
-  "cz",
-  "dabur",
-  "dad",
-  "dance",
-  "data",
-  "date",
-  "dating",
-  "datsun",
-  "day",
-  "dclk",
-  "dds",
-  "de",
-  "deal",
-  "dealer",
-  "deals",
-  "degree",
-  "delivery",
-  "dell",
-  "deloitte",
-  "delta",
-  "democrat",
-  "dental",
-  "dentist",
-  "desi",
-  "design",
-  "dev",
-  "dhl",
-  "diamonds",
-  "diet",
-  "digital",
-  "direct",
-  "directory",
-  "discount",
-  "discover",
-  "dish",
-  "diy",
-  "dj",
-  "dk",
-  "dm",
-  "dnp",
-  "do",
-  "docs",
-  "doctor",
-  "dog",
-  "domains",
-  "dot",
-  "download",
-  "drive",
-  "dtv",
-  "dubai",
-  "duck",
-  "dunlop",
-  "dupont",
-  "durban",
-  "dvag",
-  "dvr",
-  "dz",
-  "earth",
-  "eat",
-  "ec",
-  "eco",
-  "edeka",
-  "edu",
-  "education",
-  "ee",
-  "eg",
-  "email",
-  "emerck",
-  "energy",
-  "engineer",
-  "engineering",
-  "enterprises",
-  "epson",
-  "equipment",
-  "er",
-  "ericsson",
-  "erni",
-  "es",
-  "esq",
-  "estate",
-  "et",
-  "etisalat",
-  "eu",
-  "eurovision",
-  "eus",
-  "events",
-  "exchange",
-  "expert",
-  "exposed",
-  "express",
-  "extraspace",
-  "fage",
-  "fail",
-  "fairwinds",
-  "faith",
-  "family",
-  "fan",
-  "fans",
-  "farm",
-  "farmers",
-  "fashion",
-  "fast",
-  "fedex",
-  "feedback",
-  "ferrari",
-  "ferrero",
-  "fi",
-  "fiat",
-  "fidelity",
-  "fido",
-  "film",
-  "final",
-  "finance",
-  "financial",
-  "fire",
-  "firestone",
-  "firmdale",
-  "fish",
-  "fishing",
-  "fit",
-  "fitness",
-  "fj",
-  "fk",
-  "flickr",
-  "flights",
-  "flir",
-  "florist",
-  "flowers",
-  "fly",
-  "fm",
-  "fo",
-  "foo",
-  "food",
-  "foodnetwork",
-  "football",
-  "ford",
-  "forex",
-  "forsale",
-  "forum",
-  "foundation",
-  "fox",
-  "fr",
-  "free",
-  "fresenius",
-  "frl",
-  "frogans",
-  "frontdoor",
-  "frontier",
-  "ftr",
-  "fujitsu",
-  "fun",
-  "fund",
-  "furniture",
-  "futbol",
-  "fyi",
-  "ga",
-  "gal",
-  "gallery",
-  "gallo",
-  "gallup",
-  "game",
-  "games",
-  "gap",
-  "garden",
-  "gay",
-  "gb",
-  "gbiz",
-  "gd",
-  "gdn",
-  "ge",
-  "gea",
-  "gent",
-  "genting",
-  "george",
-  "gf",
-  "gg",
-  "ggee",
-  "gh",
-  "gi",
-  "gift",
-  "gifts",
-  "gives",
-  "giving",
-  "gl",
-  "glade",
-  "glass",
-  "gle",
-  "global",
-  "globo",
-  "gm",
-  "gmail",
-  "gmbh",
-  "gmo",
-  "gmx",
-  "gn",
-  "godaddy",
-  "gold",
-  "goldpoint",
-  "golf",
-  "goo",
-  "goodyear",
-  "goog",
-  "google",
-  "gop",
-  "got",
-  "gov",
-  "gp",
-  "gq",
-  "gr",
-  "grainger",
-  "graphics",
-  "gratis",
-  "green",
-  "gripe",
-  "grocery",
-  "group",
-  "gs",
-  "gt",
-  "gu",
-  "guardian",
-  "gucci",
-  "guge",
-  "guide",
-  "guitars",
-  "guru",
-  "gw",
-  "gy",
-  "hair",
-  "hamburg",
-  "hangout",
-  "haus",
-  "hbo",
-  "hdfc",
-  "hdfcbank",
-  "health",
-  "healthcare",
-  "help",
-  "helsinki",
-  "here",
-  "hermes",
-  "hgtv",
-  "hiphop",
-  "hisamitsu",
-  "hitachi",
-  "hiv",
-  "hk",
-  "hkt",
-  "hm",
-  "hn",
-  "hockey",
-  "holdings",
-  "holiday",
-  "homedepot",
-  "homegoods",
-  "homes",
-  "homesense",
-  "honda",
-  "horse",
-  "hospital",
-  "host",
-  "hosting",
-  "hot",
-  "hoteles",
-  "hotels",
-  "hotmail",
-  "house",
-  "how",
-  "hr",
-  "hsbc",
-  "ht",
-  "hu",
-  "hughes",
-  "hyatt",
-  "hyundai",
-  "ibm",
-  "icbc",
-  "ice",
-  "icu",
-  "id",
-  "ie",
-  "ieee",
-  "ifm",
-  "ikano",
-  "il",
-  "im",
-  "imamat",
-  "imdb",
-  "immo",
-  "immobilien",
-  "in",
-  "inc",
-  "industries",
-  "infiniti",
-  "info",
-  "ing",
-  "ink",
-  "institute",
-  "insurance",
-  "insure",
-  "int",
-  "international",
-  "intuit",
-  "investments",
-  "io",
-  "ipiranga",
-  "iq",
-  "ir",
-  "irish",
-  "is",
-  "ismaili",
-  "ist",
-  "istanbul",
-  "it",
-  "itau",
-  "itv",
-  "jaguar",
-  "java",
-  "jcb",
-  "je",
-  "jeep",
-  "jetzt",
-  "jewelry",
-  "jio",
-  "jll",
-  "jm",
-  "jmp",
-  "jnj",
-  "jo",
-  "jobs",
-  "joburg",
-  "jot",
-  "joy",
-  "jp",
-  "jpmorgan",
-  "jprs",
-  "juegos",
-  "juniper",
-  "kaufen",
-  "kddi",
-  "ke",
-  "kerryhotels",
-  "kerrylogistics",
-  "kerryproperties",
-  "kfh",
-  "kg",
-  "kh",
-  "ki",
-  "kia",
-  "kim",
-  "kinder",
-  "kindle",
-  "kitchen",
-  "kiwi",
-  "km",
-  "kn",
-  "koeln",
-  "komatsu",
-  "kosher",
-  "kp",
-  "kpmg",
-  "kpn",
-  "kr",
-  "krd",
-  "kred",
-  "kuokgroup",
-  "kw",
-  "ky",
-  "kyoto",
-  "kz",
-  "la",
-  "lacaixa",
-  "lamborghini",
-  "lamer",
-  "lancaster",
-  "lancia",
-  "land",
-  "landrover",
-  "lanxess",
-  "lasalle",
-  "lat",
-  "latino",
-  "latrobe",
-  "law",
-  "lawyer",
-  "lb",
-  "lc",
-  "lds",
-  "lease",
-  "leclerc",
-  "lefrak",
-  "legal",
-  "lego",
-  "lexus",
-  "lgbt",
-  "li",
-  "lidl",
-  "life",
-  "lifeinsurance",
-  "lifestyle",
-  "lighting",
-  "like",
-  "lilly",
-  "limited",
-  "limo",
-  "lincoln",
-  "linde",
-  "link",
-  "lipsy",
-  "live",
-  "living",
-  "lixil",
-  "lk",
-  "llc",
-  "llp",
-  "loan",
-  "loans",
-  "locker",
-  "locus",
-  "loft",
-  "lol",
-  "london",
-  "lotte",
-  "lotto",
-  "love",
-  "lpl",
-  "lplfinancial",
-  "lr",
-  "ls",
-  "lt",
-  "ltd",
-  "ltda",
-  "lu",
-  "lundbeck",
-  "luxe",
-  "luxury",
-  "lv",
-  "ly",
-  "ma",
-  "macys",
-  "madrid",
-  "maif",
-  "maison",
-  "makeup",
-  "man",
-  "management",
-  "mango",
-  "map",
-  "market",
-  "marketing",
-  "markets",
-  "marriott",
-  "marshalls",
-  "maserati",
-  "mattel",
-  "mba",
-  "mc",
-  "mckinsey",
-  "md",
-  "me",
-  "med",
-  "media",
-  "meet",
-  "melbourne",
-  "meme",
-  "memorial",
-  "men",
-  "menu",
-  "merckmsd",
-  "mg",
-  "mh",
-  "miami",
-  "microsoft",
-  "mil",
-  "mini",
-  "mint",
-  "mit",
-  "mitsubishi",
-  "mk",
-  "ml",
-  "mlb",
-  "mls",
-  "mm",
-  "mma",
-  "mn",
-  "mo",
-  "mobi",
-  "mobile",
-  "moda",
-  "moe",
-  "moi",
-  "mom",
-  "monash",
-  "money",
-  "monster",
-  "mormon",
-  "mortgage",
-  "moscow",
-  "moto",
-  "motorcycles",
-  "mov",
-  "movie",
-  "mp",
-  "mq",
-  "mr",
-  "ms",
-  "msd",
-  "mt",
-  "mtn",
-  "mtr",
-  "mu",
-  "museum",
-  "music",
-  "mutual",
-  "mv",
-  "mw",
-  "mx",
-  "my",
-  "mz",
-  "na",
-  "nab",
-  "nagoya",
-  "name",
-  "natura",
-  "navy",
-  "nba",
-  "nc",
-  "ne",
-  "nec",
-  "net",
-  "netbank",
-  "netflix",
-  "network",
-  "neustar",
-  "new",
-  "news",
-  "next",
-  "nextdirect",
-  "nexus",
-  "nf",
-  "nfl",
-  "ng",
-  "ngo",
-  "nhk",
-  "ni",
-  "nico",
-  "nike",
-  "nikon",
-  "ninja",
-  "nissan",
-  "nissay",
-  "nl",
-  "no",
-  "nokia",
-  "northwesternmutual",
-  "norton",
-  "now",
-  "nowruz",
-  "nowtv",
-  "np",
-  "nr",
-  "nra",
-  "nrw",
-  "ntt",
-  "nu",
-  "nyc",
-  "nz",
-  "obi",
-  "observer",
-  "off",
-  "office",
-  "okinawa",
-  "olayan",
-  "olayangroup",
-  "oldnavy",
-  "ollo",
-  "om",
-  "omega",
-  "one",
-  "ong",
-  "onl",
-  "online",
-  "ooo",
-  "open",
-  "oracle",
-  "orange",
-  "org",
-  "organic",
-  "origins",
-  "osaka",
-  "otsuka",
-  "ott",
-  "ovh",
-  "pa",
-  "page",
-  "panasonic",
-  "paris",
-  "pars",
-  "partners",
-  "parts",
-  "passagens",
-  "pay",
-  "pccw",
-  "pe",
-  "pet",
-  "pf",
-  "pfizer",
-  "pg",
-  "ph",
-  "pharmacy",
-  "phd",
-  "philips",
-  "phone",
-  "photo",
-  "photography",
-  "photos",
-  "physio",
-  "pics",
-  "pictet",
-  "pictures",
-  "pid",
-  "pin",
-  "ping",
-  "pink",
-  "pioneer",
-  "pizza",
-  "pk",
-  "pl",
-  "place",
-  "play",
-  "playstation",
-  "plumbing",
-  "plus",
-  "pm",
-  "pn",
-  "pnc",
-  "pohl",
-  "poker",
-  "politie",
-  "porn",
-  "post",
-  "pr",
-  "pramerica",
-  "praxi",
-  "press",
-  "prime",
-  "pro",
-  "prod",
-  "productions",
-  "prof",
-  "progressive",
-  "promo",
-  "properties",
-  "property",
-  "protection",
-  "pru",
-  "prudential",
-  "ps",
-  "pt",
-  "pub",
-  "pw",
-  "pwc",
-  "py",
-  "qa",
-  "qpon",
-  "quebec",
-  "quest",
-  "racing",
-  "radio",
-  "raid",
-  "re",
-  "read",
-  "realestate",
-  "realtor",
-  "realty",
-  "recipes",
-  "red",
-  "redstone",
-  "redumbrella",
-  "rehab",
-  "reise",
-  "reisen",
-  "reit",
-  "reliance",
-  "ren",
-  "rent",
-  "rentals",
-  "repair",
-  "report",
-  "republican",
-  "rest",
-  "restaurant",
-  "review",
-  "reviews",
-  "rexroth",
-  "rich",
-  "richardli",
-  "ricoh",
-  "ril",
-  "rio",
-  "rip",
-  "ro",
-  "rocher",
-  "rocks",
-  "rodeo",
-  "rogers",
-  "room",
-  "rs",
-  "rsvp",
-  "ru",
-  "rugby",
-  "ruhr",
-  "run",
-  "rw",
-  "rwe",
-  "ryukyu",
-  "sa",
-  "saarland",
-  "safe",
-  "safety",
-  "sakura",
-  "sale",
-  "salon",
-  "samsclub",
-  "samsung",
-  "sandvik",
-  "sandvikcoromant",
-  "sanofi",
-  "sap",
-  "sarl",
-  "sas",
-  "save",
-  "saxo",
-  "sb",
-  "sbi",
-  "sbs",
-  "sc",
-  "sca",
-  "scb",
-  "schaeffler",
-  "schmidt",
-  "scholarships",
-  "school",
-  "schule",
-  "schwarz",
-  "science",
-  "scjohnson",
-  "scot",
-  "sd",
-  "se",
-  "search",
-  "seat",
-  "secure",
-  "security",
-  "seek",
-  "select",
-  "sener",
-  "services",
-  "ses",
-  "seven",
-  "sew",
-  "sex",
-  "sexy",
-  "sfr",
-  "sg",
-  "sh",
-  "shangrila",
-  "sharp",
-  "shaw",
-  "shell",
-  "shia",
-  "shiksha",
-  "shoes",
-  "shop",
-  "shopping",
-  "shouji",
-  "show",
-  "showtime",
-  "si",
-  "silk",
-  "sina",
-  "singles",
-  "site",
-  "sj",
-  "sk",
-  "ski",
-  "skin",
-  "sky",
-  "skype",
-  "sl",
-  "sling",
-  "sm",
-  "smart",
-  "smile",
-  "sn",
-  "sncf",
-  "so",
-  "soccer",
-  "social",
-  "softbank",
-  "software",
-  "sohu",
-  "solar",
-  "solutions",
-  "song",
-  "sony",
-  "soy",
-  "spa",
-  "space",
-  "sport",
-  "spot",
-  "sr",
-  "srl",
-  "ss",
-  "st",
-  "stada",
-  "staples",
-  "star",
-  "statebank",
-  "statefarm",
-  "stc",
-  "stcgroup",
-  "stockholm",
-  "storage",
-  "store",
-  "stream",
-  "studio",
-  "study",
-  "style",
-  "su",
-  "sucks",
-  "supplies",
-  "supply",
-  "support",
-  "surf",
-  "surgery",
-  "suzuki",
-  "sv",
-  "swatch",
-  "swiss",
-  "sx",
-  "sy",
-  "sydney",
-  "systems",
-  "sz",
-  "tab",
-  "taipei",
-  "talk",
-  "taobao",
-  "target",
-  "tatamotors",
-  "tatar",
-  "tattoo",
-  "tax",
-  "taxi",
-  "tc",
-  "tci",
-  "td",
-  "tdk",
-  "team",
-  "tech",
-  "technology",
-  "tel",
-  "temasek",
-  "tennis",
-  "teva",
-  "tf",
-  "tg",
-  "th",
-  "thd",
-  "theater",
-  "theatre",
-  "tiaa",
-  "tickets",
-  "tienda",
-  "tiffany",
-  "tips",
-  "tires",
-  "tirol",
-  "tj",
-  "tjmaxx",
-  "tjx",
-  "tk",
-  "tkmaxx",
-  "tl",
-  "tm",
-  "tmall",
-  "tn",
-  "to",
-  "today",
-  "tokyo",
-  "tools",
-  "top",
-  "toray",
-  "toshiba",
-  "total",
-  "tours",
-  "town",
-  "toyota",
-  "toys",
-  "tr",
-  "trade",
-  "trading",
-  "training",
-  "travel",
-  "travelchannel",
-  "travelers",
-  "travelersinsurance",
-  "trust",
-  "trv",
-  "tt",
-  "tube",
-  "tui",
-  "tunes",
-  "tushu",
-  "tv",
-  "tvs",
-  "tw",
-  "tz",
-  "ua",
-  "ubank",
-  "ubs",
-  "ug",
-  "uk",
-  "unicom",
-  "university",
-  "uno",
-  "uol",
-  "ups",
-  "us",
-  "uy",
-  "uz",
-  "va",
-  "vacations",
-  "vana",
-  "vanguard",
-  "vc",
-  "ve",
-  "vegas",
-  "ventures",
-  "verisign",
-  "versicherung",
-  "vet",
-  "vg",
-  "vi",
-  "viajes",
-  "video",
-  "vig",
-  "viking",
-  "villas",
-  "vin",
-  "vip",
-  "virgin",
-  "visa",
-  "vision",
-  "viva",
-  "vivo",
-  "vlaanderen",
-  "vn",
-  "vodka",
-  "volkswagen",
-  "volvo",
-  "vote",
-  "voting",
-  "voto",
-  "voyage",
-  "vu",
-  "vuelos",
-  "wales",
-  "walmart",
-  "walter",
-  "wang",
-  "wanggou",
-  "watch",
-  "watches",
-  "weather",
-  "weatherchannel",
-  "webcam",
-  "weber",
-  "website",
-  "wed",
-  "wedding",
-  "weibo",
-  "weir",
-  "wf",
-  "whoswho",
-  "wien",
-  "wiki",
-  "williamhill",
-  "win",
-  "windows",
-  "wine",
-  "winners",
-  "wme",
-  "wolterskluwer",
-  "woodside",
-  "work",
-  "works",
-  "world",
-  "wow",
-  "ws",
-  "wtc",
-  "wtf",
-  "xbox",
-  "xerox",
-  "xfinity",
-  "xihuan",
-  "xin",
-  "xn--11b4c3d",
-  "xn--1ck2e1b",
-  "xn--1qqw23a",
-  "xn--2scrj9c",
-  "xn--30rr7y",
-  "xn--3bst00m",
-  "xn--3ds443g",
-  "xn--3e0b707e",
-  "xn--3hcrj9c",
-  "xn--3pxu8k",
-  "xn--42c2d9a",
-  "xn--45br5cyl",
-  "xn--45brj9c",
-  "xn--45q11c",
-  "xn--4dbrk0ce",
-  "xn--4gbrim",
-  "xn--54b7fta0cc",
-  "xn--55qw42g",
-  "xn--55qx5d",
-  "xn--5su34j936bgsg",
-  "xn--5tzm5g",
-  "xn--6frz82g",
-  "xn--6qq986b3xl",
-  "xn--80adxhks",
-  "xn--80ao21a",
-  "xn--80aqecdr1a",
-  "xn--80asehdb",
-  "xn--80aswg",
-  "xn--8y0a063a",
-  "xn--90a3ac",
-  "xn--90ae",
-  "xn--90ais",
-  "xn--9dbq2a",
-  "xn--9et52u",
-  "xn--9krt00a",
-  "xn--b4w605ferd",
-  "xn--bck1b9a5dre4c",
-  "xn--c1avg",
-  "xn--c2br7g",
-  "xn--cck2b3b",
-  "xn--cckwcxetd",
-  "xn--cg4bki",
-  "xn--clchc0ea0b2g2a9gcd",
-  "xn--czr694b",
-  "xn--czrs0t",
-  "xn--czru2d",
-  "xn--d1acj3b",
-  "xn--d1alf",
-  "xn--e1a4c",
-  "xn--eckvdtc9d",
-  "xn--efvy88h",
-  "xn--fct429k",
-  "xn--fhbei",
-  "xn--fiq228c5hs",
-  "xn--fiq64b",
-  "xn--fiqs8s",
-  "xn--fiqz9s",
-  "xn--fjq720a",
-  "xn--flw351e",
-  "xn--fpcrj9c3d",
-  "xn--fzc2c9e2c",
-  "xn--fzys8d69uvgm",
-  "xn--g2xx48c",
-  "xn--gckr3f0f",
-  "xn--gecrj9c",
-  "xn--gk3at1e",
-  "xn--h2breg3eve",
-  "xn--h2brj9c",
-  "xn--h2brj9c8c",
-  "xn--hxt814e",
-  "xn--i1b6b1a6a2e",
-  "xn--imr513n",
-  "xn--io0a7i",
-  "xn--j1aef",
-  "xn--j1amh",
-  "xn--j6w193g",
-  "xn--jlq480n2rg",
-  "xn--jlq61u9w7b",
-  "xn--jvr189m",
-  "xn--kcrx77d1x4a",
-  "xn--kprw13d",
-  "xn--kpry57d",
-  "xn--kput3i",
-  "xn--l1acc",
-  "xn--lgbbat1ad8j",
-  "xn--mgb9awbf",
-  "xn--mgba3a3ejt",
-  "xn--mgba3a4f16a",
-  "xn--mgba7c0bbn0a",
-  "xn--mgbaakc7dvf",
-  "xn--mgbaam7a8h",
-  "xn--mgbab2bd",
-  "xn--mgbah1a3hjkrd",
-  "xn--mgbai9azgqp6j",
-  "xn--mgbayh7gpa",
-  "xn--mgbbh1a",
-  "xn--mgbbh1a71e",
-  "xn--mgbc0a9azcg",
-  "xn--mgbca7dzdo",
-  "xn--mgbcpq6gpa1a",
-  "xn--mgberp4a5d4ar",
-  "xn--mgbgu82a",
-  "xn--mgbi4ecexp",
-  "xn--mgbpl2fh",
-  "xn--mgbt3dhd",
-  "xn--mgbtx2b",
-  "xn--mgbx4cd0ab",
-  "xn--mix891f",
-  "xn--mk1bu44c",
-  "xn--mxtq1m",
-  "xn--ngbc5azd",
-  "xn--ngbe9e0a",
-  "xn--ngbrx",
-  "xn--node",
-  "xn--nqv7f",
-  "xn--nqv7fs00ema",
-  "xn--nyqy26a",
-  "xn--o3cw4h",
-  "xn--ogbpf8fl",
-  "xn--otu796d",
-  "xn--p1acf",
-  "xn--p1ai",
-  "xn--pgbs0dh",
-  "xn--pssy2u",
-  "xn--q7ce6a",
-  "xn--q9jyb4c",
-  "xn--qcka1pmc",
-  "xn--qxa6a",
-  "xn--qxam",
-  "xn--rhqv96g",
-  "xn--rovu88b",
-  "xn--rvc1e0am3e",
-  "xn--s9brj9c",
-  "xn--ses554g",
-  "xn--t60b56a",
-  "xn--tckwe",
-  "xn--tiq49xqyj",
-  "xn--unup4y",
-  "xn--vermgensberater-ctb",
-  "xn--vermgensberatung-pwb",
-  "xn--vhquv",
-  "xn--vuq861b",
-  "xn--w4r85el8fhu5dnra",
-  "xn--w4rs40l",
-  "xn--wgbh1c",
-  "xn--wgbl6a",
-  "xn--xhq521b",
-  "xn--xkc2al3hye2a",
-  "xn--xkc2dl3a5ee0h",
-  "xn--y9a3aq",
-  "xn--yfro4i67o",
-  "xn--ygbi2ammx",
-  "xn--zfr164b",
-  "xxx",
-  "xyz",
-  "yachts",
-  "yahoo",
-  "yamaxun",
-  "yandex",
-  "ye",
-  "yodobashi",
-  "yoga",
-  "yokohama",
-  "you",
-  "youtube",
-  "yt",
-  "yun",
-  "za",
-  "zappos",
-  "zara",
-  "zero",
-  "zip",
-  "zm",
-  "zone",
-  "zuerich",
-  "zw",
-  "skiptocontent",
-  "pullrequests",
-  "issues",
-  "marketplace",
-  "explore",
-  "@andnasnd",
-  "shouldbee/",
-  "reserved-usernames",
-  "public",
-  "code",
-  "issues4",
-  "actions",
-  "projects",
-  "insights",
-  "about",
-  "access",
-  "account",
-  "accounts",
-  "activate",
-  "activities",
-  "activity",
-  "add",
-  "address",
-  "adm",
-  "admin",
-  "administration",
-  "administrator",
-  "advertising",
-  "affiliate",
-  "affiliates",
-  "ajax",
-  "all",
-  "alpha",
-  "analysis",
-  "anon",
-  "anonymous",
-  "api",
-  "apps",
-  "archive",
-  "archives",
-  "article",
-  "asct",
-  "asset",
-  "atom",
-  "auth",
-  "authentication",
-  "avatar",
-  "backup",
-  "balancer-manager",
-  "banner",
-  "banners",
-  "beta",
-  "billing",
-  "bin",
-  "blogs",
-  "board",
-  "bookmark",
-  "bots",
-  "bug",
-  "cache",
-  "cadastro",
-  "calendar",
-  "campaign",
-  "cancel",
-  "captcha",
-  "cart",
-  "categories",
-  "category",
-  "cgi",
-  "cgi-bin",
-  "changelog",
-  "check",
-  "checking",
-  "checkout",
-  "client",
-  "cliente",
-  "clients",
-  "codereview",
-  "comercial",
-  "comment",
-  "comments",
-  "communities",
-  "compras",
-  "config",
-  "configuration",
-  "connect",
-  "contact-us",
-  "contact_us",
-  "contactus",
-  "contest",
-  "contribute",
-  "corp",
-  "create",
-  "css",
-  "dashboard",
-  "db",
-  "default",
-  "delete",
-  "demo",
-  "designer",
-  "destroy",
-  "devel",
-  "developer",
-  "developers",
-  "diagram",
-  "diary",
-  "dict",
-  "dictionary",
-  "die",
-  "dir",
-  "direct_messages",
-  "dist",
-  "doc",
-  "documentation",
-  "domain",
-  "downloads",
-  "ecommerce",
-  "edit",
-  "editor",
-  "employment",
-  "empty",
-  "end",
-  "enterprise",
-  "entries",
-  "entry",
-  "error",
-  "errors",
-  "eval",
-  "event",
-  "everyone",
-  "exit",
-  "facebook",
-  "faq",
-  "favorite",
-  "favorites",
-  "feature",
-  "features",
-  "feed",
-  "feeds",
-  "file",
-  "files",
-  "first",
-  "flash",
-  "fleet",
-  "fleets",
-  "flog",
-  "follow",
-  "followers",
-  "following",
-  "forgot",
-  "form",
-  "forums",
-  "founder",
-  "friend",
-  "friends",
-  "ftp",
-  "gadget",
-  "gadgets",
-  "get",
-  "ghost",
-  "gist",
-  "github",
-  "graph",
-  "groups",
-  "guest",
-  "guests",
-  "home",
-  "homepage",
-  "hostmaster",
-  "hostname",
-  "howto",
-  "hpg",
-  "html",
-  "http",
-  "httpd",
-  "https",
-  "i",
-  "iamges",
-  "icon",
-  "icons",
-  "idea",
-  "ideas",
-  "image",
-  "images",
-  "imap",
-  "img",
-  "index",
-  "indice",
-  "information",
-  "inquiry",
-  "instagram",
-  "intranet",
-  "invitations",
-  "invite",
-  "ipad",
-  "iphone",
-  "irc",
-  "issue",
-  "item",
-  "items",
-  "javascript",
-  "job",
-  "join",
-  "js",
-  "json",
-  "jump",
-  "knowledgebase",
-  "language",
-  "languages",
-  "last",
-  "ldap-status",
-  "license",
-  "links",
-  "linux",
-  "list",
-  "lists",
-  "log",
-  "log-in",
-  "log-out",
-  "log_in",
-  "log_out",
-  "login",
-  "logout",
-  "logs",
-  "m",
-  "mac",
-  "mail",
-  "mail1",
-  "mail2",
-  "mail3",
-  "mail4",
-  "mail5",
-  "mailer",
-  "mailing",
-  "maintenance",
-  "manager",
-  "manual",
-  "maps",
-  "master",
-  "member",
-  "members",
-  "message",
-  "messages",
-  "messenger",
-  "microblog",
-  "microblogs",
-  "mine",
-  "mis",
-  "mob",
-  "movies",
-  "mp3",
-  "msg",
-  "msn",
-  "musicas",
-  "mysql",
-  "named",
-  "nan",
-  "navi",
-  "navigation",
-  "newsletter",
-  "nick",
-  "nickname",
-  "notes",
-  "noticias",
-  "notification",
-  "notifications",
-  "notify",
-  "ns",
-  "ns1",
-  "ns10",
-  "ns2",
-  "ns3",
-  "ns4",
-  "ns5",
-  "ns6",
-  "ns7",
-  "ns8",
-  "ns9",
-  "null",
-  "oauth",
-  "oauth_clients",
-  "offer",
-  "offers",
-  "official",
-  "old",
-  "openid",
-  "operator",
-  "order",
-  "orders",
-  "organization",
-  "organizations",
-  "overview",
-  "owner",
-  "owners",
-  "pager",
-  "pages",
-  "panel",
-  "password",
-  "payment",
-  "perl",
-  "photoalbum",
-  "php",
-  "phpmyadmin",
-  "phppgadmin",
-  "phpredisadmin",
-  "pic",
-  "plan",
-  "plans",
-  "plugin",
-  "plugins",
-  "policy",
-  "pop",
-  "pop3",
-  "popular",
-  "portal",
-  "postfix",
-  "postmaster",
-  "posts",
-  "premium",
-  "price",
-  "pricing",
-  "privacy",
-  "privacy-policy",
-  "privacy_policy",
-  "privacypolicy",
-  "private",
-  "product",
-  "products",
-  "profile",
-  "project",
-  "purpose",
-  "put",
-  "python",
-  "query",
-  "random",
-  "ranking",
-  "readme",
-  "recent",
-  "recruit",
-  "recruitment",
-  "register",
-  "registration",
-  "release",
-  "remove",
-  "replies",
-  "reports",
-  "repositories",
-  "repository",
-  "req",
-  "request",
-  "requests",
-  "reset",
-  "roc",
-  "root",
-  "rss",
-  "ruby",
-  "rule",
-  "sag",
-  "sales",
-  "sample",
-  "samples",
-  "script",
-  "scripts",
-  "self",
-  "send",
-  "server",
-  "server-info",
-  "server-status",
-  "service",
-  "session",
-  "sessions",
-  "setting",
-  "settings",
-  "setup",
-  "share",
-  "sign-in",
-  "sign-up",
-  "sign_in",
-  "sign_up",
-  "signin",
-  "signout",
-  "signup",
-  "sitemap",
-  "sites",
-  "smartphone",
-  "smtp",
-  "soporte",
-  "source",
-  "spec",
-  "special",
-  "sql",
-  "src",
-  "ssh",
-  "ssl",
-  "ssladmin",
-  "ssladministrator",
-  "sslwebmaster",
-  "staff",
-  "stage",
-  "staging",
-  "start",
-  "stat",
-  "state",
-  "static",
-  "stats",
-  "status",
-  "stores",
-  "stories",
-  "styleguide",
-  "stylesheet",
-  "stylesheets",
-  "subdomain",
-  "subscribe",
-  "subscriptions",
-  "suporte",
-  "svn",
-  "swf",
-  "sys",
-  "sysadmin",
-  "sysadministrator",
-  "system",
-  "tablet",
-  "tablets",
-  "tag",
-  "task",
-  "tasks",
-  "teams",
-  "telnet",
-  "term",
-  "terms",
-  "terms-of-service",
-  "terms_of_service",
-  "termsofservice",
-  "test",
-  "test1",
-  "test2",
-  "test3",
-  "teste",
-  "testing",
-  "tests",
-  "theme",
-  "themes",
-  "thread",
-  "threads",
-  "tmp",
-  "todo",
-  "tool",
-  "topic",
-  "topics",
-  "tos",
-  "tour",
-  "translations",
-  "trends",
-  "tutorial",
-  "tux",
-  "twitter",
-  "undef",
-  "unfollow",
-  "unsubscribe",
-  "update",
-  "upload",
-  "uploads",
-  "url",
-  "usage",
-  "user",
-  "username",
-  "users",
-  "usuario",
-  "vendas",
-  "ver",
-  "version",
-  "videos",
-  "visitor",
-  "web",
-  "webhook",
-  "webhooks",
-  "webmail",
-  "webmaster",
-  "websites",
-  "welcome",
-  "widget",
-  "widgets",
-  "word",
-  "workshop",
-  "ww",
-  "wws",
-  "www",
-  "www1",
-  "www2",
-  "www3",
-  "www4",
-  "www5",
-  "www6",
-  "www7",
-  "wwws",
-  "wwww",
-  "xfn",
-  "xml",
-  "xmpp",
-  "xpg",
-  "yaml",
-  "year",
-  "yml",
-  "yourdomain",
-  "yourname",
-  "yoursite",
-  "yourusername",
-  "genesis"
-]
diff --git a/services/identity/src/client_service.rs b/services/identity/src/client_service.rs
--- a/services/identity/src/client_service.rs
+++ b/services/identity/src/client_service.rs
@@ -3,6 +3,7 @@
 
 // External crate imports
 use comm_lib::aws::DynamoDBError;
+use comm_lib::shared::reserved_users::RESERVED_USERNAME_SET;
 use comm_opaque2::grpc::protocol_error_to_grpc_status;
 use moka::future::Cache;
 use rand::rngs::OsRng;
@@ -111,7 +112,7 @@
       return Err(tonic::Status::already_exists("username already exists"));
     }
 
-    if CONFIG.reserved_usernames.contains(&message.username)
+    if RESERVED_USERNAME_SET.contains(&message.username)
       || is_valid_ethereum_address(&message.username)
     {
       return Err(tonic::Status::invalid_argument("username reserved"));
@@ -151,7 +152,7 @@
     let message = request.into_inner();
     self.check_username_taken(&message.username).await?;
 
-    if CONFIG.reserved_usernames.contains(&message.username) {
+    if RESERVED_USERNAME_SET.contains(&message.username) {
       return Err(tonic::Status::invalid_argument("username reserved"));
     }
 
diff --git a/services/identity/src/config.rs b/services/identity/src/config.rs
--- a/services/identity/src/config.rs
+++ b/services/identity/src/config.rs
@@ -68,8 +68,6 @@
   pub localstack_endpoint: Option<String>,
   // Opaque 2.0 server secrets
   pub server_setup: comm_opaque2::ServerSetup<comm_opaque2::Cipher>,
-  // Reserved usernames
-  pub reserved_usernames: HashSet<String>,
   pub keyserver_public_key: Option<String>,
   pub tunnelbroker_endpoint: String,
   pub opensearch_endpoint: String,
@@ -93,7 +91,6 @@
     path_buf.push(SECRETS_SETUP_FILE);
 
     let server_setup = get_server_setup(path_buf.as_path())?;
-    let reserved_usernames = get_reserved_usernames_set()?;
     let keyserver_public_key = env::var(KEYSERVER_PUBLIC_KEY).ok();
 
     Ok(Self {
@@ -101,7 +98,6 @@
       tunnelbroker_endpoint: cli.tunnelbroker_endpoint.clone(),
       opensearch_endpoint: cli.opensearch_endpoint.clone(),
       server_setup,
-      reserved_usernames,
       keyserver_public_key,
     })
   }
@@ -162,12 +158,3 @@
   comm_opaque2::ServerSetup::deserialize(&decoded_server_setup)
     .map_err(Error::Opaque)
 }
-
-fn get_reserved_usernames_set() -> Result<HashSet<String>, Error> {
-  // All entries in `reserved_usernames.json` must be lowercase and must also be
-  // included in `lib/utils/reserved-users.js`!!
-  let contents = include_str!("../reserved_usernames.json");
-  let reserved_usernames: Vec<String> = serde_json::from_str(contents)?;
-
-  Ok(reserved_usernames.into_iter().collect())
-}
diff --git a/shared/comm-lib/Cargo.lock b/shared/comm-lib/Cargo.lock
--- a/shared/comm-lib/Cargo.lock
+++ b/shared/comm-lib/Cargo.lock
@@ -981,6 +981,7 @@
  "grpc_clients",
  "hex",
  "http",
+ "once_cell",
  "rand",
  "reqwest",
  "serde",
diff --git a/shared/comm-lib/Cargo.toml b/shared/comm-lib/Cargo.toml
--- a/shared/comm-lib/Cargo.toml
+++ b/shared/comm-lib/Cargo.toml
@@ -62,3 +62,4 @@
 # crypto dependencies
 aes-gcm = { version = "0.10", optional = true }
 aead = { version = "0.5", features = ["bytes"], optional = true }
+once_cell = "1.17"
diff --git a/shared/comm-lib/src/lib.rs b/shared/comm-lib/src/lib.rs
--- a/shared/comm-lib/src/lib.rs
+++ b/shared/comm-lib/src/lib.rs
@@ -8,6 +8,7 @@
 pub mod database;
 #[cfg(feature = "http")]
 pub mod http;
+pub mod shared;
 pub mod tools;
 
 mod reexports {
diff --git a/shared/comm-lib/src/shared/mod.rs b/shared/comm-lib/src/shared/mod.rs
new file mode 100644
--- /dev/null
+++ b/shared/comm-lib/src/shared/mod.rs
@@ -0,0 +1 @@
+pub mod reserved_users;
diff --git a/services/blob/reserved_usernames.json b/shared/comm-lib/src/shared/reserved_usernames.json
rename from services/blob/reserved_usernames.json
rename to shared/comm-lib/src/shared/reserved_usernames.json
diff --git a/shared/comm-lib/src/shared/reserved_users.rs b/shared/comm-lib/src/shared/reserved_users.rs
new file mode 100644
--- /dev/null
+++ b/shared/comm-lib/src/shared/reserved_users.rs
@@ -0,0 +1,13 @@
+use once_cell::sync::Lazy;
+use std::collections::HashSet;
+
+fn get_reserved_usernames_set() -> HashSet<String> {
+  // All entries in `reserved_usernames.json` must be lowercase and must also be
+  // included in `lib/utils/reserved-users.js`!!
+  let contents = include_str!("reserved_usernames.json");
+  let reserved_usernames: Vec<String> = serde_json::from_str(contents).unwrap();
+
+  reserved_usernames.into_iter().collect()
+}
+pub static RESERVED_USERNAME_SET: Lazy<HashSet<String>> =
+  Lazy::new(get_reserved_usernames_set);