diff --git a/cabal-install/cabal-install.cabal b/cabal-install/cabal-install.cabal
index f864dd237f5fdc3540f9cd7e8c929dfdb6205701..5ae47f72cc429c2edbb13e26b36e8a8fc45c4d65 100644
--- a/cabal-install/cabal-install.cabal
+++ b/cabal-install/cabal-install.cabal
@@ -194,7 +194,6 @@ library
         Distribution.Client.VCS
         Distribution.Client.Version
         Distribution.Client.Win32SelfUpgrade
-        Distribution.Client.World
 
     build-depends:
         async      >= 2.0      && < 2.3,
diff --git a/cabal-install/src/Distribution/Client/Config.hs b/cabal-install/src/Distribution/Client/Config.hs
index efca42d953c55913eb973526cefa4b51187ab4fe..17eb0c0550f7c5a7adbd701cbd7d2b600cfa7c54 100644
--- a/cabal-install/src/Distribution/Client/Config.hs
+++ b/cabal-install/src/Distribution/Client/Config.hs
@@ -243,7 +243,6 @@ instance Semigroup SavedConfig where
         globalLocalNoIndexRepos = lastNonEmptyNL globalLocalNoIndexRepos,
         globalActiveRepos       = combine globalActiveRepos,
         globalLogsDir           = combine globalLogsDir,
-        globalWorldFile         = combine globalWorldFile,
         globalIgnoreExpiry      = combine globalIgnoreExpiry,
         globalHttpTransport     = combine globalHttpTransport,
         globalNix               = combine globalNix,
@@ -321,7 +320,6 @@ instance Semigroup SavedConfig where
         installReportPlanningFailure = combine installReportPlanningFailure,
         installSymlinkBinDir         = combine installSymlinkBinDir,
         installPerComponent          = combine installPerComponent,
-        installOneShot               = combine installOneShot,
         installNumJobs               = combine installNumJobs,
         installKeepGoing             = combine installKeepGoing,
         installRunTests              = combine installRunTests,
@@ -540,7 +538,6 @@ baseSavedConfig = do
   userPrefix <- getCabalDir
   cacheDir   <- defaultCacheDir
   logsDir    <- defaultLogsDir
-  worldFile  <- defaultWorldFile
   return mempty {
     savedConfigureFlags  = mempty {
       configHcFlavor     = toFlag defaultCompiler,
@@ -552,8 +549,7 @@ baseSavedConfig = do
     },
     savedGlobalFlags = mempty {
       globalCacheDir     = toFlag cacheDir,
-      globalLogsDir      = toFlag logsDir,
-      globalWorldFile    = toFlag worldFile
+      globalLogsDir      = toFlag logsDir
     }
   }
 
@@ -567,14 +563,12 @@ initialSavedConfig :: IO SavedConfig
 initialSavedConfig = do
   cacheDir    <- defaultCacheDir
   logsDir     <- defaultLogsDir
-  worldFile   <- defaultWorldFile
   extraPath   <- defaultExtraPath
   installPath <- defaultInstallPath
   return mempty {
     savedGlobalFlags     = mempty {
       globalCacheDir     = toFlag cacheDir,
-      globalRemoteRepos  = toNubList [defaultRemoteRepo],
-      globalWorldFile    = toFlag worldFile
+      globalRemoteRepos  = toNubList [defaultRemoteRepo]
     },
     savedConfigureFlags  = mempty {
       configProgramPathExtra = toNubList extraPath
@@ -614,12 +608,6 @@ defaultLogsDir = do
   dir <- getCabalDir
   return $ dir </> "logs"
 
--- | Default position of the world file
-defaultWorldFile :: IO FilePath
-defaultWorldFile = do
-  dir <- getCabalDir
-  return $ dir </> "world"
-
 defaultExtraPath :: IO [FilePath]
 defaultExtraPath = do
   dir <- getCabalDir
diff --git a/cabal-install/src/Distribution/Client/DistDirLayout.hs b/cabal-install/src/Distribution/Client/DistDirLayout.hs
index a4ca5194c56a83e1a3412c519b0b919d388d39da..d89233707971d5f812d45a20b5ff946bccf0211d 100644
--- a/cabal-install/src/Distribution/Client/DistDirLayout.hs
+++ b/cabal-install/src/Distribution/Client/DistDirLayout.hs
@@ -147,8 +147,7 @@ data StoreDirLayout = StoreDirLayout {
 data CabalDirLayout = CabalDirLayout {
        cabalStoreDirLayout        :: StoreDirLayout,
 
-       cabalLogsDirectory         :: FilePath,
-       cabalWorldFile             :: FilePath
+       cabalLogsDirectory         :: FilePath
      }
 
 
@@ -309,5 +308,3 @@ mkCabalDirLayout cabalDir mstoreDir mlogDir =
         defaultStoreDirLayout (fromMaybe (cabalDir </> "store") mstoreDir)
     cabalLogsDirectory :: FilePath
     cabalLogsDirectory = fromMaybe (cabalDir </> "logs") mlogDir
-    cabalWorldFile :: FilePath
-    cabalWorldFile = cabalDir </> "world"
diff --git a/cabal-install/src/Distribution/Client/Fetch.hs b/cabal-install/src/Distribution/Client/Fetch.hs
index 8e9496c8dc65408ada658d73a05b6ce5e23dc36a..1f6c196c149e7221fbcf54f966bd085bfb2b58b2 100644
--- a/cabal-install/src/Distribution/Client/Fetch.hs
+++ b/cabal-install/src/Distribution/Client/Fetch.hs
@@ -78,7 +78,7 @@ fetch verbosity _ _ _ _ _ _ _ [] =
     notice verbosity "No packages requested. Nothing to do."
 
 fetch verbosity packageDBs repoCtxt comp platform progdb
-      globalFlags fetchFlags userTargets = do
+      _ fetchFlags userTargets = do
 
     traverse_ (checkTarget verbosity) userTargets
 
@@ -87,7 +87,6 @@ fetch verbosity packageDBs repoCtxt comp platform progdb
     pkgConfigDb       <- readPkgConfigDb      verbosity progdb
 
     pkgSpecifiers <- resolveUserTargets verbosity repoCtxt
-                       (fromFlag $ globalWorldFile globalFlags)
                        (packageIndex sourcePkgDb)
                        userTargets
 
diff --git a/cabal-install/src/Distribution/Client/Freeze.hs b/cabal-install/src/Distribution/Client/Freeze.hs
index 4b4ea1f31df8494c06201de452ae04869730a0ee..ff9f6fde91a571c9efee62c3cf0a3e497a5d4e7d 100644
--- a/cabal-install/src/Distribution/Client/Freeze.hs
+++ b/cabal-install/src/Distribution/Client/Freeze.hs
@@ -105,14 +105,13 @@ getFreezePkgs :: Verbosity
               -> FreezeFlags
               -> IO [SolverPlanPackage]
 getFreezePkgs verbosity packageDBs repoCtxt comp platform progdb
-      globalFlags freezeFlags = do
+      _ freezeFlags = do
 
     installedPkgIndex <- getInstalledPackages verbosity comp packageDBs progdb
     sourcePkgDb       <- getSourcePackages    verbosity repoCtxt
     pkgConfigDb       <- readPkgConfigDb      verbosity progdb
 
     pkgSpecifiers <- resolveUserTargets verbosity repoCtxt
-                       (fromFlag $ globalWorldFile globalFlags)
                        (packageIndex sourcePkgDb)
                        [UserTargetLocalDir "."]
 
diff --git a/cabal-install/src/Distribution/Client/Get.hs b/cabal-install/src/Distribution/Client/Get.hs
index 220448465d68a5eef67d56c2d3ce804eea534489..d2e08b3ef465c0821fcb87a9a4f6a39b93c40bab 100644
--- a/cabal-install/src/Distribution/Client/Get.hs
+++ b/cabal-install/src/Distribution/Client/Get.hs
@@ -67,7 +67,7 @@ get :: Verbosity
 get verbosity _ _ _ [] =
     notice verbosity "No packages requested. Nothing to do."
 
-get verbosity repoCtxt globalFlags getFlags userTargets = do
+get verbosity repoCtxt _ getFlags userTargets = do
   let useSourceRepo = case getSourceRepository getFlags of
                         NoFlag -> False
                         _      -> True
@@ -84,7 +84,6 @@ get verbosity repoCtxt globalFlags getFlags userTargets = do
   (sourcePkgDb, _, _) <- getSourcePackagesAtIndexState verbosity repoCtxt idxState activeRepos
 
   pkgSpecifiers <- resolveUserTargets verbosity repoCtxt
-                   (fromFlag $ globalWorldFile globalFlags)
                    (packageIndex sourcePkgDb)
                    userTargets
 
diff --git a/cabal-install/src/Distribution/Client/GlobalFlags.hs b/cabal-install/src/Distribution/Client/GlobalFlags.hs
index d44e3eb9733328ea060bafe9130b1ed1c97ca9b8..e6330d79fc2134eac99dbba35f5b0b797c8c680a 100644
--- a/cabal-install/src/Distribution/Client/GlobalFlags.hs
+++ b/cabal-install/src/Distribution/Client/GlobalFlags.hs
@@ -65,7 +65,6 @@ data GlobalFlags = GlobalFlags
     , globalLocalNoIndexRepos :: NubList LocalRepo
     , globalActiveRepos       :: Flag ActiveRepos
     , globalLogsDir           :: Flag FilePath
-    , globalWorldFile         :: Flag FilePath
     , globalIgnoreExpiry      :: Flag Bool    -- ^ Ignore security expiry dates
     , globalHttpTransport     :: Flag String
     , globalNix               :: Flag Bool  -- ^ Integrate with Nix
@@ -84,7 +83,6 @@ defaultGlobalFlags  = GlobalFlags
     , globalLocalNoIndexRepos = mempty
     , globalActiveRepos       = mempty
     , globalLogsDir           = mempty
-    , globalWorldFile         = mempty
     , globalIgnoreExpiry      = Flag False
     , globalHttpTransport     = mempty
     , globalNix               = Flag False
diff --git a/cabal-install/src/Distribution/Client/Install.hs b/cabal-install/src/Distribution/Client/Install.hs
index 9a2003ccae8a4881c85161954465572c49efa7fc..d099ec4dfff2fbc5b8930691df13dcb3b48c7e4a 100644
--- a/cabal-install/src/Distribution/Client/Install.hs
+++ b/cabal-install/src/Distribution/Client/Install.hs
@@ -86,7 +86,6 @@ import qualified Distribution.Client.InstallSymlink as InstallSymlink
          ( symlinkBinaries )
 import Distribution.Client.Types.OverwritePolicy (OverwritePolicy (..))
 import qualified Distribution.Client.Win32SelfUpgrade as Win32SelfUpgrade
-import qualified Distribution.Client.World as World
 import qualified Distribution.InstalledPackageInfo as Installed
 import Distribution.Client.JobControl
 
@@ -129,8 +128,6 @@ import Distribution.Package
          ( PackageIdentifier(..), PackageId, packageName, packageVersion
          , Package(..), HasMungedPackageId(..), HasUnitId(..)
          , UnitId )
-import Distribution.Types.Dependency
-         ( Dependency (..), mainLibSet )
 import Distribution.Types.GivenComponent
          ( GivenComponent(..) )
 import Distribution.Types.PackageVersionConstraint
@@ -165,11 +162,9 @@ import qualified Data.ByteString as BS
 --   * complain about flags that do not apply to any package given as target
 --     so flags do not apply to dependencies, only listed, can use flag
 --     constraints for dependencies
---   * only record applicable flags in world file
 -- * allow flag constraints
 -- * allow installed constraints
 -- * allow flag and installed preferences
--- * change world file to use cabal section syntax
 --   * allow persistent configure flags for each package individually
 
 -- ------------------------------------------------------------
@@ -257,7 +252,7 @@ makeInstallContext :: Verbosity -> InstallArgs -> Maybe [UserTarget]
                       -> IO InstallContext
 makeInstallContext verbosity
   (packageDBs, repoCtxt, comp, _, progdb,
-   globalFlags, _, configExFlags, installFlags, _, _, _) mUserTargets = do
+   _, _, configExFlags, installFlags, _, _, _) mUserTargets = do
 
     let idxState = flagToMaybe (installIndexState installFlags)
 
@@ -282,7 +277,6 @@ makeInstallContext verbosity
                         | otherwise         = userTargets0
 
         pkgSpecifiers <- resolveUserTargets verbosity repoCtxt
-                         (fromFlag $ globalWorldFile globalFlags)
                          (packageIndex sourcePkgDb)
                          userTargets
         return (userTargets, pkgSpecifiers)
@@ -798,7 +792,6 @@ theSpecifiedPackage pkgSpec =
 --  * build reporting, local and remote
 --  * symlinking binaries
 --  * updating indexes
---  * updating world file
 --  * error reporting
 --
 postInstallActions :: Verbosity
@@ -810,13 +803,7 @@ postInstallActions :: Verbosity
 postInstallActions verbosity
   (packageDBs, _, comp, platform, progdb
   ,globalFlags, configFlags, _, installFlags, _, _, _)
-  targets installPlan buildOutcomes = do
-
-  unless oneShot $
-    World.insert verbosity worldFile
-      --FIXME: does not handle flags
-      [ World.WorldPkgInfo (Dependency pn vr mainLibSet) mempty
-      | UserTargetNamed (PackageVersionConstraint pn vr) <- targets ]
+  _ installPlan buildOutcomes = do
 
   let buildReports = BuildReports.fromInstallPlan platform (compilerId comp)
                                                   installPlan buildOutcomes
@@ -840,8 +827,6 @@ postInstallActions verbosity
   where
     reportingLevel = fromFlag (installBuildReports installFlags)
     logsDir        = fromFlag (globalLogsDir globalFlags)
-    oneShot        = fromFlag (installOneShot installFlags)
-    worldFile      = fromFlag $ globalWorldFile globalFlags
 
 storeDetailedBuildReports :: Verbosity -> FilePath
                           -> [(BuildReports.BuildReport, Maybe Repo)] -> IO ()
diff --git a/cabal-install/src/Distribution/Client/List.hs b/cabal-install/src/Distribution/Client/List.hs
index d52b309a7f3b217c3d7ede2a5b617eb168d46745..a8bede49dd74b383c6fbb311a88344890259ae5a 100644
--- a/cabal-install/src/Distribution/Client/List.hs
+++ b/cabal-install/src/Distribution/Client/List.hs
@@ -192,7 +192,7 @@ info verbosity _ _ _ _ _ _ [] =
     notice verbosity "No packages requested. Nothing to do."
 
 info verbosity packageDBs repoCtxt comp progdb
-     globalFlags _listFlags userTargets = do
+     _ _listFlags userTargets = do
 
     installedPkgIndex <- getInstalledPackages verbosity comp packageDBs progdb
     sourcePkgDb       <- getSourcePackages verbosity repoCtxt
@@ -209,7 +209,6 @@ info verbosity packageDBs repoCtxt comp progdb
                    ++ map packageId
                       (PackageIndex.allPackages sourcePkgIndex)
     pkgSpecifiers <- resolveUserTargets verbosity repoCtxt
-                       (fromFlag $ globalWorldFile globalFlags)
                        sourcePkgs' userTargets
 
     pkgsinfo      <- sequenceA
diff --git a/cabal-install/src/Distribution/Client/Manpage.hs b/cabal-install/src/Distribution/Client/Manpage.hs
index 60786bfeafdb84924ded91b92a216b3c5a8f658a..2c2f38672fd42b76dfd836b2762d1eb187e3edb5 100644
--- a/cabal-install/src/Distribution/Client/Manpage.hs
+++ b/cabal-install/src/Distribution/Client/Manpage.hs
@@ -42,7 +42,6 @@ data FileInfo = FileInfo String String -- ^ path, description
 files :: [FileInfo]
 files =
   [ (FileInfo "~/.cabal/config" "The defaults that can be overridden with command-line options.")
-  , (FileInfo "~/.cabal/world"  "A list of all packages whose installation has been explicitly requested.")
   ]
 
 manpageCmd :: String -> [CommandSpec a] -> ManpageFlags -> IO ()
diff --git a/cabal-install/src/Distribution/Client/ProjectConfig.hs b/cabal-install/src/Distribution/Client/ProjectConfig.hs
index 6da708d651ee645223f1c212c612f9f878bfc8ac..766f35e50aedc991a3eae1a9e5b1686b19d2e04d 100644
--- a/cabal-install/src/Distribution/Client/ProjectConfig.hs
+++ b/cabal-install/src/Distribution/Client/ProjectConfig.hs
@@ -311,7 +311,6 @@ resolveBuildTimeSettings verbosity
     --buildSettingLogVerbosity  -- defined below, more complicated
     buildSettingBuildReports  = fromFlag    projectConfigBuildReports
     buildSettingSymlinkBinDir = flagToList  projectConfigSymlinkBinDir
-    buildSettingOneShot       = fromFlag    projectConfigOneShot
     buildSettingNumJobs       = determineNumJobs projectConfigNumJobs
     buildSettingKeepGoing     = fromFlag    projectConfigKeepGoing
     buildSettingOfflineMode   = fromFlag    projectConfigOfflineMode
@@ -336,7 +335,6 @@ resolveBuildTimeSettings verbosity
       projectConfigBuildReports          = toFlag NoReports,
       projectConfigReportPlanningFailure = toFlag False,
       projectConfigKeepGoing             = toFlag False,
-      projectConfigOneShot               = toFlag False,
       projectConfigOfflineMode           = toFlag False,
       projectConfigKeepTempFiles         = toFlag False,
       projectConfigIgnoreExpiry          = toFlag False
diff --git a/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs b/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs
index 38852d0fd00e4f7b6518331a4a56b8ecc0d33399..410d9531cea44d85dd6a125d8d956c1625e126fe 100644
--- a/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs
+++ b/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs
@@ -500,7 +500,6 @@ convertLegacyBuildOnlyFlags globalFlags configFlags
     GlobalFlags {
       globalCacheDir          = projectConfigCacheDir,
       globalLogsDir           = projectConfigLogsDir,
-      globalWorldFile         = _,
       globalHttpTransport     = projectConfigHttpTransport,
       globalIgnoreExpiry      = projectConfigIgnoreExpiry
     } = globalFlags
@@ -520,7 +519,6 @@ convertLegacyBuildOnlyFlags globalFlags configFlags
       installBuildReports       = projectConfigBuildReports,
       installReportPlanningFailure = projectConfigReportPlanningFailure,
       installSymlinkBinDir      = projectConfigSymlinkBinDir,
-      installOneShot            = projectConfigOneShot,
       installNumJobs            = projectConfigNumJobs,
       installKeepGoing          = projectConfigKeepGoing,
       installOfflineMode        = projectConfigOfflineMode
@@ -586,7 +584,6 @@ convertToLegacySharedConfig
       globalLocalNoIndexRepos = projectConfigLocalNoIndexRepos,
       globalActiveRepos       = projectConfigActiveRepos,
       globalLogsDir           = projectConfigLogsDir,
-      globalWorldFile         = mempty,
       globalIgnoreExpiry      = projectConfigIgnoreExpiry,
       globalHttpTransport     = projectConfigHttpTransport,
       globalNix               = mempty,
@@ -642,7 +639,6 @@ convertToLegacySharedConfig
       installReportPlanningFailure = projectConfigReportPlanningFailure,
       installSymlinkBinDir     = projectConfigSymlinkBinDir,
       installPerComponent      = projectConfigPerComponent,
-      installOneShot           = projectConfigOneShot,
       installNumJobs           = projectConfigNumJobs,
       installKeepGoing         = projectConfigKeepGoing,
       installRunTests          = mempty,
@@ -1027,7 +1023,7 @@ legacySharedConfigFieldDescrs constraintSrc = concat
       , "root-cmd", "symlink-bindir"
       , "build-log"
       , "remote-build-reporting", "report-planning-failure"
-      , "one-shot", "jobs", "keep-going", "offline", "per-component"
+      , "jobs", "keep-going", "offline", "per-component"
         -- solver flags:
       , "max-backjumps", "reorder-goals", "count-conflicts"
       , "fine-grained-conflicts" , "minimize-conflict-set", "independent-goals"
diff --git a/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs b/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs
index eb32ce27410739aea132475f1f490d37f589bc8c..84996b2a0cf4e8bdb9c11e752344d1b323dfcbcf 100644
--- a/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs
+++ b/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs
@@ -142,7 +142,6 @@ data ProjectConfigBuildOnly
        projectConfigBuildReports          :: Flag ReportLevel,
        projectConfigReportPlanningFailure :: Flag Bool,
        projectConfigSymlinkBinDir         :: Flag FilePath,
-       projectConfigOneShot               :: Flag Bool,
        projectConfigNumJobs               :: Flag (Maybe Int),
        projectConfigKeepGoing             :: Flag Bool,
        projectConfigOfflineMode           :: Flag Bool,
@@ -448,7 +447,6 @@ data BuildTimeSettings
        buildSettingBuildReports          :: ReportLevel,
        buildSettingReportPlanningFailure :: Bool,
        buildSettingSymlinkBinDir         :: [FilePath],
-       buildSettingOneShot               :: Bool,
        buildSettingNumJobs               :: Int,
        buildSettingKeepGoing             :: Bool,
        buildSettingOfflineMode           :: Bool,
diff --git a/cabal-install/src/Distribution/Client/Setup.hs b/cabal-install/src/Distribution/Client/Setup.hs
index 4b85c88278ea35bc65220fa29f700c3b62c1b96e..279ae9eba12118bceeb7757e6579f134ec06257e 100644
--- a/cabal-install/src/Distribution/Client/Setup.hs
+++ b/cabal-install/src/Distribution/Client/Setup.hs
@@ -378,7 +378,6 @@ globalCommand commands = CommandUI {
     -- arguments we don't want shown in the help
     -- the remote repo flags are not useful compared to the more general "active-repositories" flag.
     -- the global logs directory was only used in v1, while in v2 we have specific project config logs dirs
-    -- the world-file flag is long deprecated and unused
     -- default-user-config is support for a relatively obscure workflow for v1-freeze.
     argsNotShown :: [OptionField GlobalFlags]
     argsNotShown = [
@@ -407,11 +406,6 @@ globalCommand commands = CommandUI {
          globalConstraintsFile (\v flags -> flags {globalConstraintsFile = v})
          (reqArgFlag "FILE")
 
-      ,option [] ["world-file"]
-         "The location of the world file"
-         globalWorldFile (\v flags -> flags { globalWorldFile = v })
-         (reqArgFlag "FILE")
-
       ]
 
 -- ------------------------------------------------------------
@@ -1573,7 +1567,6 @@ data InstallFlags = InstallFlags {
     -- when removing v1 commands
     installSymlinkBinDir    :: Flag FilePath,
     installPerComponent     :: Flag Bool,
-    installOneShot          :: Flag Bool,
     installNumJobs          :: Flag (Maybe Int),
     installKeepGoing        :: Flag Bool,
     installRunTests         :: Flag Bool,
@@ -1614,7 +1607,6 @@ defaultInstallFlags = InstallFlags {
     installReportPlanningFailure = Flag False,
     installSymlinkBinDir   = mempty,
     installPerComponent    = Flag True,
-    installOneShot         = Flag False,
     installNumJobs         = mempty,
     installKeepGoing       = Flag False,
     installRunTests        = mempty,
@@ -1909,11 +1901,6 @@ installOptions showOrParseArgs =
           installPerComponent (\v flags -> flags { installPerComponent = v })
           (boolOpt [] [])
 
-      , option [] ["one-shot"]
-          "Do not record the packages in the world file."
-          installOneShot (\v flags -> flags { installOneShot = v })
-          (yesNoOpt showOrParseArgs)
-
       , option [] ["run-tests"]
           "Run package test suites during installation."
           installRunTests (\v flags -> flags { installRunTests = v })
diff --git a/cabal-install/src/Distribution/Client/Targets.hs b/cabal-install/src/Distribution/Client/Targets.hs
index 1e16d2765c8d3e4db5883f769d21dc9f76a5b1c6..b189bd8a753999c8c4d01a6789150a51395f6437 100644
--- a/cabal-install/src/Distribution/Client/Targets.hs
+++ b/cabal-install/src/Distribution/Client/Targets.hs
@@ -53,7 +53,6 @@ import Distribution.Client.Compat.Prelude
 import Distribution.Package
          ( Package(..), PackageName, unPackageName, mkPackageName
          , packageName )
-import Distribution.Types.Dependency
 import Distribution.Client.Types
          ( PackageLocation(..), ResolvedPkgLoc, UnresolvedSourcePackage
          , PackageSpecifier(..) )
@@ -65,7 +64,6 @@ import           Distribution.Solver.Types.PackageIndex (PackageIndex)
 import qualified Distribution.Solver.Types.PackageIndex as PackageIndex
 import           Distribution.Solver.Types.SourcePackage
 
-import qualified Distribution.Client.World as World
 import qualified Codec.Archive.Tar       as Tar
 import qualified Codec.Archive.Tar.Entry as Tar
 import qualified Distribution.Client.Tar as Tar
@@ -79,11 +77,11 @@ import Distribution.Types.PackageVersionConstraint
 import Distribution.PackageDescription
          ( GenericPackageDescription )
 import Distribution.Types.Flag
-         ( nullFlagAssignment, parsecFlagAssignmentNonEmpty )
+         ( parsecFlagAssignmentNonEmpty )
 import Distribution.Version
-         ( anyVersion, isAnyVersion )
+         ( isAnyVersion )
 import Distribution.Simple.Utils
-         ( die', warn, lowercase )
+         ( die', lowercase )
 
 import Distribution.PackageDescription.Parsec
          ( readGenericPackageDescription, parseGenericPackageDescriptionMaybe )
@@ -116,13 +114,6 @@ data UserTarget =
      --
      UserTargetNamed PackageVersionConstraint
 
-     -- | A special virtual package that refers to the collection of packages
-     -- recorded in the world file that the user specifically installed.
-     --
-     -- > cabal install world
-     --
-   | UserTargetWorld
-
      -- | A specific package that is unpacked in a local directory, often the
      -- current directory.
      --
@@ -174,17 +165,11 @@ data UserTargetProblem
    | UserTargetUnexpectedUriScheme String
    | UserTargetUnrecognisedUri     String
    | UserTargetUnrecognised        String
-   | UserTargetBadWorldPkg
   deriving Show
 
 readUserTarget :: String -> IO (Either UserTargetProblem UserTarget)
 readUserTarget targetstr =
     case eitherParsec targetstr of
-      Right (PackageVersionConstraint pkgn verrange)
-        | pkgn == mkPackageName "world"
-          -> return $ if verrange == anyVersion
-                      then Right UserTargetWorld
-                      else Left  UserTargetBadWorldPkg
       Right dep -> return (Right (UserTargetNamed dep))
       Left _err -> do
         fileTarget <- testFileTargets targetstr
@@ -254,14 +239,9 @@ reportUserTargetProblems verbosity problems = do
                   | name <- target ]
              ++ "Targets can be:\n"
              ++ " - package names, e.g. 'pkgname', 'pkgname-1.0.1', 'pkgname < 2.0'\n"
-             ++ " - the special 'world' target\n"
              ++ " - cabal files 'pkgname.cabal' or package directories 'pkgname/'\n"
              ++ " - package tarballs 'pkgname.tar.gz' or 'http://example.com/pkgname.tar.gz'"
 
-    case [ () | UserTargetBadWorldPkg <- problems ] of
-      [] -> return ()
-      _  -> die' verbosity "The special 'world' target does not take any version."
-
     case [ target | UserTargetNonexistantFile target <- problems ] of
       []     -> return ()
       target -> die' verbosity
@@ -305,17 +285,16 @@ reportUserTargetProblems verbosity problems = do
 resolveUserTargets :: Package pkg
                    => Verbosity
                    -> RepoContext
-                   -> FilePath
                    -> PackageIndex pkg
                    -> [UserTarget]
                    -> IO [PackageSpecifier UnresolvedSourcePackage]
-resolveUserTargets verbosity repoCtxt worldFile available userTargets = do
+resolveUserTargets verbosity repoCtxt available userTargets = do
 
     -- given the user targets, get a list of fully or partially resolved
     -- package references
     packageTargets <- traverse (readPackageTarget verbosity)
                   =<< traverse (fetchPackageTarget verbosity repoCtxt) . concat
-                  =<< traverse (expandUserTarget verbosity worldFile) userTargets
+                  =<< traverse (expandUserTarget verbosity) userTargets
 
     -- users are allowed to give package names case-insensitively, so we must
     -- disambiguate named package references
@@ -357,26 +336,15 @@ data PackageTarget pkg =
 -- (each of which refers to only one package).
 --
 expandUserTarget :: Verbosity
-                 -> FilePath
                  -> UserTarget
                  -> IO [PackageTarget (PackageLocation ())]
-expandUserTarget verbosity worldFile userTarget = case userTarget of
+expandUserTarget verbosity userTarget = case userTarget of
 
     UserTargetNamed (PackageVersionConstraint name vrange) ->
       let props = [ PackagePropertyVersion vrange
                   | not (isAnyVersion vrange) ]
       in  return [PackageTargetNamedFuzzy name props userTarget]
 
-    UserTargetWorld -> do
-      worldPkgs <- World.getContents verbosity worldFile
-      --TODO: should we warn if there are no world targets?
-      return [ PackageTargetNamed name props userTarget
-             | World.WorldPkgInfo (Dependency name vrange _) flags <- worldPkgs
-             , let props = [ PackagePropertyVersion vrange
-                           | not (isAnyVersion vrange) ]
-                        ++ [ PackagePropertyFlags flags
-                           | not (nullFlagAssignment flags) ] ]
-
     UserTargetLocalDir dir ->
       return [ PackageTargetLocation (LocalUnpackedPackage dir) ]
 
@@ -554,8 +522,7 @@ disambiguatePackageTargets availablePkgIndex availableExtra targets =
 reportPackageTargetProblems :: Verbosity
                             -> [PackageTargetProblem] -> IO ()
 reportPackageTargetProblems verbosity problems = do
-    case [ pkg | PackageNameUnknown pkg originalTarget <- problems
-               , not (isUserTagetWorld originalTarget) ] of
+    case [ pkg | PackageNameUnknown pkg _ <- problems ] of
       []    -> return ()
       pkgs  -> die' verbosity $ unlines
                        [ "There is no package named '" ++ prettyShow name ++ "'. "
@@ -574,16 +541,6 @@ reportPackageTargetProblems verbosity problems = do
                            ++ "."
                          | (name, matches) <- ambiguities ]
 
-    case [ pkg | PackageNameUnknown pkg UserTargetWorld <- problems ] of
-      []   -> return ()
-      pkgs -> warn verbosity $
-                 "The following 'world' packages will be ignored because "
-              ++ "they refer to packages that cannot be found: "
-              ++ intercalate ", " (map prettyShow pkgs) ++ "\n"
-              ++ "You can suppress this warning by correcting the world file."
-  where
-    isUserTagetWorld UserTargetWorld = True; isUserTagetWorld _ = False
-
 
 -- ------------------------------------------------------------
 -- * Disambiguating package names
diff --git a/cabal-install/src/Distribution/Client/World.hs b/cabal-install/src/Distribution/Client/World.hs
deleted file mode 100644
index 49d530fabfbcf3314bc1dce34c87a5d681c6ddde..0000000000000000000000000000000000000000
--- a/cabal-install/src/Distribution/Client/World.hs
+++ /dev/null
@@ -1,146 +0,0 @@
-{-# LANGUAGE DeriveGeneric #-}
------------------------------------------------------------------------------
--- |
--- Module      :  Distribution.Client.World
--- Copyright   :  (c) Peter Robinson 2009
--- License     :  BSD-like
---
--- Maintainer  :  thaldyron@gmail.com
--- Stability   :  provisional
--- Portability :  portable
---
--- Interface to the world-file that contains a list of explicitly
--- requested packages. Meant to be imported qualified.
---
--- A world file entry stores the package-name, package-version, and
--- user flags.
--- For example, the entry generated by
--- # cabal install stm-io-hooks --flags="-debug"
--- looks like this:
--- # stm-io-hooks -any --flags="-debug"
--- To rebuild/upgrade the packages in world (e.g. when updating the compiler)
--- use
--- # cabal install world
---
------------------------------------------------------------------------------
-module Distribution.Client.World (
-    WorldPkgInfo(..),
-    insert,
-    delete,
-    getContents,
-  ) where
-
-import Prelude (sequence)
-import Distribution.Client.Compat.Prelude hiding (getContents)
-
-import Distribution.Types.Dependency
-import Distribution.Types.Flag
-         ( FlagAssignment, FlagName, unFlagAssignment
-         , unFlagName, parsecFlagAssignmentNonEmpty )
-import Distribution.Simple.Utils
-         ( die', info, chattyTry, writeFileAtomic )
-import qualified Distribution.Compat.CharParsing as P
-import qualified Text.PrettyPrint as Disp
-
-import Data.List
-         ( unionBy, deleteFirstsBy )
-import System.IO.Error
-         ( isDoesNotExistError )
-import qualified Data.ByteString.Lazy.Char8 as B
-
-
-data WorldPkgInfo = WorldPkgInfo Dependency FlagAssignment
-  deriving (Show,Eq, Generic)
-
--- | Adds packages to the world file; creates the file if it doesn't
--- exist yet. Version constraints and flag assignments for a package are
--- updated if already present. IO errors are non-fatal.
-insert :: Verbosity -> FilePath -> [WorldPkgInfo] -> IO ()
-insert = modifyWorld $ unionBy equalUDep
-
--- | Removes packages from the world file.
--- Note: Currently unused as there is no mechanism in Cabal (yet) to
--- handle uninstalls. IO errors are non-fatal.
-delete :: Verbosity -> FilePath -> [WorldPkgInfo] -> IO ()
-delete = modifyWorld $ flip (deleteFirstsBy equalUDep)
-
--- | WorldPkgInfo values are considered equal if they refer to
--- the same package, i.e., we don't care about differing versions or flags.
-equalUDep :: WorldPkgInfo -> WorldPkgInfo -> Bool
-equalUDep (WorldPkgInfo (Dependency pkg1 _ _) _)
-          (WorldPkgInfo (Dependency pkg2 _ _) _) = pkg1 == pkg2
-
--- | Modifies the world file by applying an update-function ('unionBy'
--- for 'insert', 'deleteFirstsBy' for 'delete') to the given list of
--- packages. IO errors are considered non-fatal.
-modifyWorld :: ([WorldPkgInfo] -> [WorldPkgInfo]
-                -> [WorldPkgInfo])
-                        -- ^ Function that defines how
-                        -- the list of user packages are merged with
-                        -- existing world packages.
-            -> Verbosity
-            -> FilePath               -- ^ Location of the world file
-            -> [WorldPkgInfo] -- ^ list of user supplied packages
-            -> IO ()
-modifyWorld _ _         _     []   = return ()
-modifyWorld f verbosity world pkgs =
-  chattyTry "Error while updating world-file. " $ do
-    pkgsOldWorld <- getContents verbosity world
-    -- Filter out packages that are not in the world file:
-    let pkgsNewWorld = nubBy equalUDep $ f pkgs pkgsOldWorld
-    -- 'Dependency' is not an Ord instance, so we need to check for
-    -- equivalence the awkward way:
-    if not (all (`elem` pkgsOldWorld) pkgsNewWorld &&
-            all (`elem` pkgsNewWorld) pkgsOldWorld)
-      then do
-        info verbosity "Updating world file..."
-        writeFileAtomic world . B.pack $ unlines
-            [ (prettyShow pkg) | pkg <- pkgsNewWorld]
-      else
-        info verbosity "World file is already up to date."
-
-
--- | Returns the content of the world file as a list
-getContents :: Verbosity -> FilePath -> IO [WorldPkgInfo]
-getContents verbosity world = do
-  content <- safelyReadFile world
-  let result :: [Maybe WorldPkgInfo]
-      result = map simpleParsec (lines $ B.unpack content)
-  case sequence result of
-    Nothing -> die' verbosity "Could not parse world file."
-    Just xs -> return xs
-  where
-  safelyReadFile :: FilePath -> IO B.ByteString
-  safelyReadFile file = B.readFile file `catchIO` handler
-    where
-      handler e | isDoesNotExistError e = return B.empty
-                | otherwise             = ioError e
-
-
-instance Pretty WorldPkgInfo where
-  pretty (WorldPkgInfo dep flags) = pretty dep Disp.<+> dispFlags (unFlagAssignment flags)
-    where
-      dispFlags [] = Disp.empty
-      dispFlags fs = Disp.text "--flags="
-                  <<>> Disp.doubleQuotes (flagAssToDoc fs)
-      flagAssToDoc :: [(FlagName, Bool)] -> Disp.Doc
-      flagAssToDoc = foldr (\(fname,val) flagAssDoc ->
-                             (if not val then Disp.char '-'
-                                         else Disp.char '+')
-                             <<>> Disp.text (unFlagName fname)
-                             Disp.<+> flagAssDoc)
-                           Disp.empty
-
-instance Parsec WorldPkgInfo where
-  parsec = do
-      dep <- parsec
-      P.spaces
-      flagAss <- P.option mempty parseFlagAssignment
-      return $ WorldPkgInfo dep flagAss
-    where
-      parseFlagAssignment :: CabalParsing m => m FlagAssignment
-      parseFlagAssignment = do
-          _ <- P.string "--flags="
-          inDoubleQuotes parsecFlagAssignmentNonEmpty
-        where
-          inDoubleQuotes = P.between (P.char '"') (P.char '"')
diff --git a/cabal-install/tests/UnitTests/Distribution/Client/ArbitraryInstances.hs b/cabal-install/tests/UnitTests/Distribution/Client/ArbitraryInstances.hs
index 2da6c9f9780100269becf1f44ecb5a1a237fa74a..3a26ca2e56049ae7a677350ee44a59f90f83d56e 100644
--- a/cabal-install/tests/UnitTests/Distribution/Client/ArbitraryInstances.hs
+++ b/cabal-install/tests/UnitTests/Distribution/Client/ArbitraryInstances.hs
@@ -38,7 +38,6 @@ import Distribution.Client.Targets
 import Distribution.Client.Types                         (RepoName (..), WriteGhcEnvironmentFilesPolicy)
 import Distribution.Client.Types.AllowNewer
 import Distribution.Client.Types.OverwritePolicy         (OverwritePolicy)
-import Distribution.Client.World                         (WorldPkgInfo (..))
 import Distribution.Solver.Types.OptionalStanza          (OptionalStanza (..), OptionalStanzaMap, OptionalStanzaSet, optStanzaSetFromList, optStanzaTabulate)
 import Distribution.Solver.Types.PackageConstraint       (PackageProperty (..))
 
@@ -252,14 +251,6 @@ instance Arbitrary RelaxedDep where
     arbitrary = genericArbitrary
     shrink    = genericShrink
 
--------------------------------------------------------------------------------
--- WorldPkgInfo
--------------------------------------------------------------------------------
-
-instance Arbitrary WorldPkgInfo where
-    arbitrary = WorldPkgInfo <$> arbitrary <*> arbitrary
-    shrink    = genericShrink
-
 -------------------------------------------------------------------------------
 -- UserConstraint
 -------------------------------------------------------------------------------
diff --git a/cabal-install/tests/UnitTests/Distribution/Client/Described.hs b/cabal-install/tests/UnitTests/Distribution/Client/Described.hs
index 3c3cbc41df850d8e079fcff0b84e1b5a439540b2..820cdf95a705e427b2eca3ebce8f998898150d9e 100644
--- a/cabal-install/tests/UnitTests/Distribution/Client/Described.hs
+++ b/cabal-install/tests/UnitTests/Distribution/Client/Described.hs
@@ -18,7 +18,6 @@ import Distribution.Client.IndexUtils.Timestamp   (Timestamp)
 import Distribution.Client.Targets                (UserConstraint)
 import Distribution.Client.Types                  (RepoName)
 import Distribution.Client.Types.AllowNewer       (RelaxDepSubject, RelaxDeps, RelaxedDep)
-import Distribution.Client.World                  (WorldPkgInfo)
 
 tests :: TestTree
 tests = testGroup "Described"
@@ -31,7 +30,6 @@ tests = testGroup "Described"
     , testDescribed (Proxy :: Proxy RelaxedDep)
     , testDescribed (Proxy :: Proxy RelaxDeps)
     , testDescribed (Proxy :: Proxy UserConstraint)
-    , testDescribed (Proxy :: Proxy WorldPkgInfo)
     , testDescribed (Proxy :: Proxy InstallOutcome)
     , testDescribed (Proxy :: Proxy Outcome)
     ]
diff --git a/cabal-install/tests/UnitTests/Distribution/Client/DescribedInstances.hs b/cabal-install/tests/UnitTests/Distribution/Client/DescribedInstances.hs
index 5081b849311b8619769aed81a43fcc3aabb2cfc3..d0e2ad43a84efef8613bfefabc2aabd9b5a72cc3 100644
--- a/cabal-install/tests/UnitTests/Distribution/Client/DescribedInstances.hs
+++ b/cabal-install/tests/UnitTests/Distribution/Client/DescribedInstances.hs
@@ -7,7 +7,6 @@ import Distribution.Client.Compat.Prelude
 import Distribution.Described
 import Data.List ((\\))
 
-import Distribution.Types.Dependency   (Dependency)
 import Distribution.Types.PackageId    (PackageIdentifier)
 import Distribution.Types.PackageName  (PackageName)
 import Distribution.Types.VersionRange (VersionRange)
@@ -19,7 +18,6 @@ import Distribution.Client.IndexUtils.Timestamp   (Timestamp)
 import Distribution.Client.Targets                (UserConstraint)
 import Distribution.Client.Types                  (RepoName)
 import Distribution.Client.Types.AllowNewer       (RelaxDepSubject, RelaxDeps, RelaxedDep)
-import Distribution.Client.World                  (WorldPkgInfo)
 import Distribution.Client.Glob                   (FilePathGlob)
 
 -------------------------------------------------------------------------------
@@ -79,15 +77,6 @@ instance Described FilePathGlob where
         normal   = reChars $ ['\0'..'\128'] \\ "*{},/\\"
         escape   = fromString "\\" <> reChars "*{},"
 
--------------------------------------------------------------------------------
--- WorldPkgInfo
--------------------------------------------------------------------------------
-
-instance Described WorldPkgInfo where
-  describe _ =
-    describe (Proxy :: Proxy Dependency)
-    <> REOpt (RESpaces1 <> "--flags=\"" <> describeFlagAssignmentNonEmpty <> "\"")
-
 -------------------------------------------------------------------------------
 -- AllowNewer
 -------------------------------------------------------------------------------
diff --git a/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs b/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs
index fc9d0c36f77049569ca63689068548ba8298b5c7..f020bd3abf1df7067e76a1d034570b476a2223c7 100644
--- a/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs
+++ b/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs
@@ -384,7 +384,6 @@ instance Arbitrary ProjectConfigBuildOnly where
         <*> arbitrary
         <*> arbitrary
         <*> (fmap getShortToken <$> arbitrary)
-        <*> arbitrary
         <*> arbitraryNumJobs
         <*> arbitrary
         <*> arbitrary
@@ -406,7 +405,6 @@ instance Arbitrary ProjectConfigBuildOnly where
                                   , projectConfigBuildReports = x05
                                   , projectConfigReportPlanningFailure = x06
                                   , projectConfigSymlinkBinDir = x07
-                                  , projectConfigOneShot = x08
                                   , projectConfigNumJobs = x09
                                   , projectConfigKeepGoing = x10
                                   , projectConfigOfflineMode = x11
@@ -425,7 +423,6 @@ instance Arbitrary ProjectConfigBuildOnly where
                                , projectConfigBuildReports = x05'
                                , projectConfigReportPlanningFailure = x06'
                                , projectConfigSymlinkBinDir = x07'
-                               , projectConfigOneShot = x08'
                                , projectConfigNumJobs = postShrink_NumJobs x09'
                                , projectConfigKeepGoing = x10'
                                , projectConfigOfflineMode = x11'
@@ -436,12 +433,12 @@ instance Arbitrary ProjectConfigBuildOnly where
                                , projectConfigLogsDir = x16
                                , projectConfigClientInstallFlags = x17' }
       | ((x00', x01', x02', x03', x04'),
-         (x05', x06', x07', x08', x09'),
+         (x05', x06', x07',       x09'),
          (x10', x11', x12',       x14'),
          (            x17', x18'      ))
           <- shrink
                ((x00, x01, x02, x03, x04),
-                (x05, x06, x07, x08, preShrink_NumJobs x09),
+                (x05, x06, x07,      preShrink_NumJobs x09),
                 (x10, x11, x12,      x14),
                 (          x17, x18     ))
       ]
diff --git a/changelog.d/issue-6767 b/changelog.d/issue-6767
new file mode 100644
index 0000000000000000000000000000000000000000..fd4f66ee177571fd454d02e22a973452f739ae8e
--- /dev/null
+++ b/changelog.d/issue-6767
@@ -0,0 +1,17 @@
+synopsis:  Remove World file functionality
+packages: cabal-install
+issues: #6767
+prs: #7746
+description: {
+In v1-install, 'world' was used to trace what packages have been
+installed, and re-install everything that is listed in it on-demand. However, in
+v2-install, this is no longer needed, and outdated.
+Additionally, 'world' code-path is probably not up-to-date, remove it instead of
+having partial features.
+
+- Don't generate `world` file in `~/.cabal` when `v1-install` is executed.
+
+- Don't ever read `world` from `~/.cabal`.
+
+- Remove meta-target `world` from `v1-install`.
+}
diff --git a/doc/cabal-project.rst b/doc/cabal-project.rst
index 6ac3b6b8e16ab41f48fd796aa641c39dc83e785b..011c120fbe88ec1e82c05a64295019586656a466 100644
--- a/doc/cabal-project.rst
+++ b/doc/cabal-project.rst
@@ -1521,17 +1521,8 @@ Advanced global configuration options
     The command line variant of this flag is
     ``--build-summary=TEMPLATE``.
 
-.. cfg-field:: world-file: path
-               --world-file=FILE
-    :deprecated:
-
-    [STRIKEOUT:The location of the world file.] Deprecated.
-
-    The command line variant of this flag is ``--world-file=FILE``.
-
 Undocumented fields: ``root-cmd``, ``symlink-bindir``, ``build-log``,
-``remote-build-reporting``, ``report-planned-failure``, ``one-shot``,
-``offline``.
+``remote-build-reporting``, ``report-planned-failure``, ``offline``.
 
 Advanced solver options
 ^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/release.py b/release.py
index 888d9e6ffa014fdaa3d0972a93b09dcc19619757..f22531e41386f57797164940233bdeb18e90a5be 100755
--- a/release.py
+++ b/release.py
@@ -144,7 +144,6 @@ def step_config(args: Args):
         logs-dir:          {args.builddir}/cabal/logs
         store-dir:         {args.builddir}/cabal/store
         symlink-bindir:    {args.builddir}/bin
-        world-file:        {args.builddir}/cabal/world
         extra-prog-path:   {extraprogpath}
 
         jobs: 1