diff --git a/docs/development/new-package-manager-template.md b/docs/development/new-package-manager-template.md
index 4d603ec68f3c1a8ebb1e7b3f0b473f1bd4c05b55..0142fe58faa48c6e389b50cf4e40a2b80cdb4044 100644
--- a/docs/development/new-package-manager-template.md
+++ b/docs/development/new-package-manager-template.md
@@ -74,14 +74,6 @@
 - [ ] Supports range constraints (e.g `^1.0.0` or `1.x`)
 - [ ] No
 
-### Is this package manager used for applications, libraries, or both? If both, is there a way to tell which is which?
-
-- [ ] Applications
-- [ ] Libraries
-- [ ] Both (explain how to tell which is which)
-
-### If ranges are supported, are there any cases when Renovate should pin ranges to exact versions if rangeStrategy=auto?
-
 ---
 
 ## Lookup
diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md
index 123d305747b065ed51c7f3fdef91dbc20e2ef8fa..2a69db77e11210b4eaf3f45e816b9e82eef6e417 100644
--- a/docs/usage/configuration-options.md
+++ b/docs/usage/configuration-options.md
@@ -2353,11 +2353,9 @@ Behavior:
 
 Renovate's `"auto"` strategy works like this for npm:
 
-1. Always pin `devDependencies`
-2. Pin `dependencies` if we detect that it's an app and not a library
-3. Widen `peerDependencies`
-4. If an existing range already ends with an "or" operator - e.g. `"^1.0.0 || ^2.0.0"` - then Renovate will widen it, e.g. making it into `"^1.0.0 || ^2.0.0 || ^3.0.0"`
-5. Otherwise, replace the range. e.g. `"^2.0.0"` would be replaced by `"^3.0.0"`
+1. Widen `peerDependencies`
+1. If an existing range already ends with an "or" operator like `"^1.0.0 || ^2.0.0"`, then Renovate widens it into `"^1.0.0 || ^2.0.0 || ^3.0.0"`
+1. Otherwise, Renovate replaces the range. So `"^2.0.0"` is replaced by `"^3.0.0"`
 
 By default, Renovate assumes that if you are using ranges then it's because you want them to be wide/open.
 Renovate won't deliberately "narrow" any range by increasing the semver value inside.
diff --git a/docs/usage/getting-started/installing-onboarding.md b/docs/usage/getting-started/installing-onboarding.md
index 36f0f11b7c25dbf968956cab7980c352fab721bd..c40a9ae8a2a247c4349b6992a11ac26c21511218 100644
--- a/docs/usage/getting-started/installing-onboarding.md
+++ b/docs/usage/getting-started/installing-onboarding.md
@@ -107,7 +107,7 @@ Sometimes Renovate detects that an override to these defaults is needed, and wil
 Please check the docs on this website for an exhaustive Configuration Reference.
 To help you get started, here are some of the most commonly changed (overridden) configuration settings:
 
-- **rangeStrategy**: By default (with zero config) it's `"replace"` but the `"config:base"` preset overrides it to `"auto"`. If you don't want to pin dependency versions and retain ranges, add the `":preserveSemverRanges"` preset to the `extends` array
+- **rangeStrategy**: By default (with zero config) it's `"replace"` but the `"config:base"` preset overrides it to `"auto"`. Some prefer `"bump"`.
 - **labels**: Labels to assign to Pull Requests
 - **assignees**: GitHub user(s) to assign the Pull Requests to
 
diff --git a/lib/modules/manager/bundler/index.ts b/lib/modules/manager/bundler/index.ts
index 2f34350e9cb1e57b74505aa31b61a271c4cb7e95..8f3ffc212b63cdf88ec4aca3b8108c9752663428 100644
--- a/lib/modules/manager/bundler/index.ts
+++ b/lib/modules/manager/bundler/index.ts
@@ -4,7 +4,6 @@ import { RubyGemsDatasource } from '../../datasource/rubygems';
 import * as rubyVersioning from '../../versioning/ruby';
 import { updateArtifacts } from './artifacts';
 import { extractPackageFile } from './extract';
-import { getRangeStrategy } from './range';
 import { updateLockedDependency } from './update-locked';
 
 export const language = ProgrammingLanguage.Ruby;
@@ -18,7 +17,6 @@ export const supportsLockFileMaintenance = true;
 export {
   extractPackageFile, // Mandatory unless extractAllPackageFiles is used instead
   updateArtifacts, // Optional
-  getRangeStrategy, // Optional
   updateLockedDependency,
 };
 
diff --git a/lib/modules/manager/bundler/range.spec.ts b/lib/modules/manager/bundler/range.spec.ts
deleted file mode 100644
index 13c1de99379467bb87d3e9652e70fc0ec7dd471e..0000000000000000000000000000000000000000
--- a/lib/modules/manager/bundler/range.spec.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import type { RangeConfig } from '../types';
-import { getRangeStrategy } from '.';
-
-describe('modules/manager/bundler/range', () => {
-  describe('getRangeStrategy()', () => {
-    it('returns replace when rangeStrategy is auto', () => {
-      const config: RangeConfig = { rangeStrategy: 'auto' };
-      expect(getRangeStrategy(config)).toBe('replace');
-    });
-
-    it('returns the config value when rangeStrategy is different than auto', () => {
-      const config: RangeConfig = { rangeStrategy: 'update-lockfile' };
-      expect(getRangeStrategy(config)).toBe('update-lockfile');
-    });
-  });
-});
diff --git a/lib/modules/manager/bundler/range.ts b/lib/modules/manager/bundler/range.ts
deleted file mode 100644
index 84805358f5c4b8f2324856dfe15e6665da3b20b6..0000000000000000000000000000000000000000
--- a/lib/modules/manager/bundler/range.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import type { RangeStrategy } from '../../../types';
-import type { RangeConfig } from '../types';
-
-/*
- * The getRangeStrategy() function is optional and can be removed if not applicable.
- * It is used when the user configures rangeStrategy=auto.
- *
- * For example in npm, when rangeStrategy is auto we:
- *  - Always pin "devDependencies"
- *  - Pin "dependencies" only if we detect that it's probably an app not a library
- *  - Always widen "peerDependencies"
- *
- * If this function is not present then the default 'replace' value will be used.
- *
- */
-export function getRangeStrategy(config: RangeConfig): RangeStrategy {
-  if (config.rangeStrategy === 'auto') {
-    return 'replace';
-  }
-
-  return config.rangeStrategy;
-}
diff --git a/lib/modules/manager/composer/range.spec.ts b/lib/modules/manager/composer/range.spec.ts
index 3c5b42f4951024750ff3fb2e1f31290d2e650c74..87f65b9c67c98aa19604d1d5bfbc12470bb9c65d 100644
--- a/lib/modules/manager/composer/range.spec.ts
+++ b/lib/modules/manager/composer/range.spec.ts
@@ -7,21 +7,21 @@ describe('modules/manager/composer/range', () => {
     expect(getRangeStrategy(config)).toBe('widen');
   });
 
-  it('pins require-dev', () => {
+  it('replaces require-dev', () => {
     const config: RangeConfig = {
       rangeStrategy: 'auto',
       depType: 'require-dev',
     };
-    expect(getRangeStrategy(config)).toBe('pin');
+    expect(getRangeStrategy(config)).toBe('replace');
   });
 
-  it('pins project require', () => {
+  it('replaces project require', () => {
     const config: RangeConfig = {
       rangeStrategy: 'auto',
       managerData: { composerJsonType: 'project' },
       depType: 'require',
     };
-    expect(getRangeStrategy(config)).toBe('pin');
+    expect(getRangeStrategy(config)).toBe('replace');
   });
 
   it('widens complex ranges', () => {
diff --git a/lib/modules/manager/composer/range.ts b/lib/modules/manager/composer/range.ts
index 02b7daff820c959d972ddd71bb44b874a4131c5e..dd70eb54f92c38476752e85c1f5503c507cbac3d 100644
--- a/lib/modules/manager/composer/range.ts
+++ b/lib/modules/manager/composer/range.ts
@@ -4,13 +4,7 @@ import type { RangeConfig } from '../types';
 import type { ComposerManagerData } from './types';
 
 export function getRangeStrategy(config: RangeConfig): RangeStrategy {
-  const {
-    managerData = {},
-    depType,
-    depName,
-    currentValue,
-    rangeStrategy,
-  } = config;
+  const { managerData = {}, currentValue, rangeStrategy } = config;
   const { composerJsonType } = managerData as ComposerManagerData;
   const isComplexRange = currentValue?.includes(' || ');
   if (rangeStrategy === 'bump' && isComplexRange) {
@@ -23,25 +17,6 @@ export function getRangeStrategy(config: RangeConfig): RangeStrategy {
   if (rangeStrategy !== 'auto') {
     return rangeStrategy;
   }
-  if (depType === 'require-dev') {
-    // Always pin dev dependencies
-    logger.trace({ dependency: depName }, 'Pinning require-dev');
-    return 'pin';
-  }
-  const isApp =
-    composerJsonType &&
-    ![
-      'library',
-      'metapackage',
-      'composer-plugin',
-      'symfony-bundle',
-      'typo3-cms-extension',
-    ].includes(composerJsonType);
-  if (isApp && depType === 'require') {
-    // Pin dependencies if it's an app/project
-    logger.trace({ dependency: depName }, 'Pinning app require');
-    return 'pin';
-  }
   if (
     isComplexRange ||
     (composerJsonType && ['typo3-cms-extension'].includes(composerJsonType))
diff --git a/lib/modules/manager/npm/extract/__snapshots__/index.spec.ts.snap b/lib/modules/manager/npm/extract/__snapshots__/index.spec.ts.snap
index 165138b1c3e47dd6fdeb44884af7a7cdd71b4aa1..9962ebc67ae6580b3b84834c2b2db9c6dfb940c0 100644
--- a/lib/modules/manager/npm/extract/__snapshots__/index.spec.ts.snap
+++ b/lib/modules/manager/npm/extract/__snapshots__/index.spec.ts.snap
@@ -22,7 +22,6 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() catches invalid
   "npmrc": undefined,
   "packageFileVersion": undefined,
   "packageJsonName": undefined,
-  "packageJsonType": "app",
   "pnpmShrinkwrap": undefined,
   "skipInstalls": true,
   "yarnLock": undefined,
@@ -144,7 +143,6 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() extracts engine
   "npmrc": undefined,
   "packageFileVersion": undefined,
   "packageJsonName": undefined,
-  "packageJsonType": "library",
   "pnpmShrinkwrap": undefined,
   "skipInstalls": true,
   "yarnLock": undefined,
@@ -325,7 +323,6 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() extracts non-np
   "npmrc": undefined,
   "packageFileVersion": undefined,
   "packageJsonName": undefined,
-  "packageJsonType": "app",
   "pnpmShrinkwrap": undefined,
   "skipInstalls": true,
   "yarnLock": undefined,
@@ -375,7 +372,6 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() extracts npm pa
   "npmrc": undefined,
   "packageFileVersion": undefined,
   "packageJsonName": undefined,
-  "packageJsonType": "app",
   "pnpmShrinkwrap": undefined,
   "skipInstalls": false,
   "yarnLock": undefined,
@@ -410,7 +406,6 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() extracts packag
   "npmrc": undefined,
   "packageFileVersion": undefined,
   "packageJsonName": undefined,
-  "packageJsonType": "app",
   "pnpmShrinkwrap": undefined,
   "skipInstalls": true,
   "yarnLock": undefined,
@@ -478,7 +473,6 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() extracts volta
   "npmrc": undefined,
   "packageFileVersion": undefined,
   "packageJsonName": undefined,
-  "packageJsonType": "library",
   "pnpmShrinkwrap": undefined,
   "skipInstalls": true,
   "yarnLock": undefined,
@@ -533,7 +527,6 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() extracts volta
   "npmrc": undefined,
   "packageFileVersion": undefined,
   "packageJsonName": undefined,
-  "packageJsonType": "library",
   "pnpmShrinkwrap": undefined,
   "skipInstalls": true,
   "yarnLock": undefined,
@@ -670,7 +663,6 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() finds "npmClien
   "npmrc": undefined,
   "packageFileVersion": "1.0.0",
   "packageJsonName": "renovate",
-  "packageJsonType": "app",
   "pnpmShrinkwrap": undefined,
   "skipInstalls": true,
   "yarnLock": undefined,
@@ -807,7 +799,6 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() finds "npmClien
   "npmrc": undefined,
   "packageFileVersion": "1.0.0",
   "packageJsonName": "renovate",
-  "packageJsonType": "app",
   "pnpmShrinkwrap": undefined,
   "skipInstalls": true,
   "yarnLock": undefined,
@@ -944,7 +935,6 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() finds a lock fi
   "npmrc": undefined,
   "packageFileVersion": "1.0.0",
   "packageJsonName": "renovate",
-  "packageJsonType": "app",
   "pnpmShrinkwrap": undefined,
   "skipInstalls": true,
   "yarnLock": "yarn.lock",
@@ -967,7 +957,6 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() finds complex y
   "npmrc": undefined,
   "packageFileVersion": "0.0.8",
   "packageJsonName": "@a/b",
-  "packageJsonType": "app",
   "pnpmShrinkwrap": undefined,
   "skipInstalls": true,
   "yarnLock": undefined,
@@ -1106,7 +1095,6 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() finds lerna 1`]
   "npmrc": undefined,
   "packageFileVersion": "1.0.0",
   "packageJsonName": "renovate",
-  "packageJsonType": "app",
   "pnpmShrinkwrap": undefined,
   "skipInstalls": true,
   "yarnLock": undefined,
@@ -1129,7 +1117,6 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() finds simple ya
   "npmrc": undefined,
   "packageFileVersion": "0.0.8",
   "packageJsonName": "@a/b",
-  "packageJsonType": "app",
   "pnpmShrinkwrap": undefined,
   "skipInstalls": true,
   "yarnLock": undefined,
@@ -1154,7 +1141,6 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() finds simple ya
   "npmrc": undefined,
   "packageFileVersion": "0.0.8",
   "packageJsonName": "@a/b",
-  "packageJsonType": "app",
   "pnpmShrinkwrap": undefined,
   "skipInstalls": true,
   "yarnLock": undefined,
@@ -1293,7 +1279,6 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() returns an arra
   "npmrc": undefined,
   "packageFileVersion": "1.0.0",
   "packageJsonName": "renovate",
-  "packageJsonType": "app",
   "pnpmShrinkwrap": undefined,
   "skipInstalls": true,
   "yarnLock": undefined,
@@ -1412,7 +1397,6 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() returns an arra
   "npmrc": undefined,
   "packageFileVersion": "1.0.0",
   "packageJsonName": "renovate",
-  "packageJsonType": "app",
   "pnpmShrinkwrap": undefined,
   "skipInstalls": true,
   "yarnLock": undefined,
@@ -1549,7 +1533,6 @@ exports[`modules/manager/npm/extract/index .extractPackageFile() sets skipInstal
   "npmrc": undefined,
   "packageFileVersion": "1.0.0",
   "packageJsonName": "renovate",
-  "packageJsonType": "app",
   "pnpmShrinkwrap": undefined,
   "skipInstalls": false,
   "yarnLock": "yarn.lock",
diff --git a/lib/modules/manager/npm/extract/index.ts b/lib/modules/manager/npm/extract/index.ts
index d395a4940d5237163a9beea4e0bf5d05bebab252..237d3b83177a98bd5690908706cc6a671f69e0d8 100644
--- a/lib/modules/manager/npm/extract/index.ts
+++ b/lib/modules/manager/npm/extract/index.ts
@@ -18,7 +18,6 @@ import type {
 import type { NpmManagerData } from '../types';
 import { getLockedVersions } from './locked-versions';
 import { detectMonorepos } from './monorepo';
-import { mightBeABrowserLibrary } from './type';
 import type { NpmPackage, NpmPackageDependency } from './types';
 import { isZeroInstall } from './yarn';
 
@@ -73,9 +72,6 @@ export async function extractPackageFile(
   } else {
     yarnWorkspacesPackages = packageJson.workspaces?.packages;
   }
-  const packageJsonType = mightBeABrowserLibrary(packageJson)
-    ? 'library'
-    : 'app';
 
   const lockFiles: NpmLockFiles = {
     yarnLock: 'yarn.lock',
@@ -458,7 +454,6 @@ export async function extractPackageFile(
     deps,
     packageJsonName,
     packageFileVersion,
-    packageJsonType,
     npmrc,
     ...lockFiles,
     managerData: {
diff --git a/lib/modules/manager/npm/extract/type.spec.ts b/lib/modules/manager/npm/extract/type.spec.ts
deleted file mode 100644
index df2b6b4a97b90205fb627b330baa74acff1aba86..0000000000000000000000000000000000000000
--- a/lib/modules/manager/npm/extract/type.spec.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import { mightBeABrowserLibrary } from './type';
-
-describe('modules/manager/npm/extract/type', () => {
-  describe('.mightBeABrowserLibrary()', () => {
-    it('is not a library if private', () => {
-      const isLibrary = mightBeABrowserLibrary({ private: true });
-      expect(isLibrary).toBeFalse();
-    });
-
-    it('is not a library if no main', () => {
-      const isLibrary = mightBeABrowserLibrary({});
-      expect(isLibrary).toBeFalse();
-    });
-
-    it('is a library if has a main', () => {
-      const isLibrary = mightBeABrowserLibrary({ main: 'index.js ' });
-      expect(isLibrary).toBeTrue();
-    });
-  });
-});
diff --git a/lib/modules/manager/npm/extract/type.ts b/lib/modules/manager/npm/extract/type.ts
deleted file mode 100644
index bf0f4b64486ecbf063307977caa0724c9cf4e3b4..0000000000000000000000000000000000000000
--- a/lib/modules/manager/npm/extract/type.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import type { NpmPackage } from './types';
-
-export function mightBeABrowserLibrary(packageJson: NpmPackage): boolean {
-  // return true unless we're sure it's not a browser library
-  if (packageJson.private === true) {
-    // it's not published
-    return false;
-  }
-  if (packageJson.main === undefined && packageJson.exports === undefined) {
-    // it can't be required
-    return false;
-  }
-  // TODO: how can we know if it's a node.js library only, and not browser?
-  // Otherwise play it safe and return true (#9616)
-  return true;
-}
diff --git a/lib/modules/manager/npm/range.spec.ts b/lib/modules/manager/npm/range.spec.ts
index c50ae019767ce0b5c6c4182199056fb0046b279c..997567a68da1280275544369bfbb716c0918607e 100644
--- a/lib/modules/manager/npm/range.spec.ts
+++ b/lib/modules/manager/npm/range.spec.ts
@@ -7,21 +7,20 @@ describe('modules/manager/npm/range', () => {
     expect(getRangeStrategy(config)).toBe('widen');
   });
 
-  it('pins devDependencies', () => {
+  it('replaces devDependencies', () => {
     const config: RangeConfig = {
       rangeStrategy: 'auto',
       depType: 'devDependencies',
     };
-    expect(getRangeStrategy(config)).toBe('pin');
+    expect(getRangeStrategy(config)).toBe('replace');
   });
 
-  it('pins app dependencies', () => {
+  it('replaces app dependencies', () => {
     const config: RangeConfig = {
       rangeStrategy: 'auto',
       depType: 'dependencies',
-      packageJsonType: 'app',
     };
-    expect(getRangeStrategy(config)).toBe('pin');
+    expect(getRangeStrategy(config)).toBe('replace');
   });
 
   it('widens peerDependencies', () => {
diff --git a/lib/modules/manager/npm/range.ts b/lib/modules/manager/npm/range.ts
index 6c676a7472f8124844a4ec4367c6fcd08b0a1b2f..ed56cb10705d7a9642e83fe14913cbdd5b03a755 100644
--- a/lib/modules/manager/npm/range.ts
+++ b/lib/modules/manager/npm/range.ts
@@ -4,8 +4,7 @@ import type { RangeStrategy } from '../../../types';
 import type { RangeConfig } from '../types';
 
 export function getRangeStrategy(config: RangeConfig): RangeStrategy {
-  const { depType, depName, packageJsonType, currentValue, rangeStrategy } =
-    config;
+  const { depType, currentValue, rangeStrategy } = config;
   // TODO #7154
   const isComplexRange = parseRange(currentValue!).length > 1;
   if (rangeStrategy === 'bump' && isComplexRange) {
@@ -18,16 +17,6 @@ export function getRangeStrategy(config: RangeConfig): RangeStrategy {
   if (rangeStrategy !== 'auto') {
     return rangeStrategy;
   }
-  if (depType === 'devDependencies') {
-    // Always pin devDependencies
-    logger.trace({ dependency: depName }, 'Pinning devDependency');
-    return 'pin';
-  }
-  if (depType === 'dependencies' && packageJsonType === 'app') {
-    // Pin dependencies if we're pretty sure it's not a browser library
-    logger.trace({ dependency: depName }, 'Pinning app dependency');
-    return 'pin';
-  }
   if (depType === 'peerDependencies') {
     // Widen peer dependencies
     logger.debug('Widening peer dependencies');
diff --git a/lib/modules/manager/pip_requirements/index.ts b/lib/modules/manager/pip_requirements/index.ts
index 2e9fe5ed44b998acb46656b72a8216d0e82922cb..688ffbd3f8c7d6467f8946b0cdd9d5c5eeaf659a 100644
--- a/lib/modules/manager/pip_requirements/index.ts
+++ b/lib/modules/manager/pip_requirements/index.ts
@@ -4,7 +4,6 @@ import { PypiDatasource } from '../../datasource/pypi';
 
 export { updateArtifacts } from './artifacts';
 export { extractPackageFile } from './extract';
-export { getRangeStrategy } from './range';
 
 export const language = ProgrammingLanguage.Python;
 
diff --git a/lib/modules/manager/pip_requirements/range.spec.ts b/lib/modules/manager/pip_requirements/range.spec.ts
deleted file mode 100644
index 990d06cfd14b4bd0ff600c47a2221499da593070..0000000000000000000000000000000000000000
--- a/lib/modules/manager/pip_requirements/range.spec.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import type { RangeConfig } from '../types';
-import { getRangeStrategy } from '.';
-
-describe('modules/manager/pip_requirements/range', () => {
-  it('returns same if not auto', () => {
-    const config: RangeConfig = { rangeStrategy: 'widen' };
-    expect(getRangeStrategy(config)).toBe('widen');
-  });
-
-  it('pins if auto', () => {
-    const config: RangeConfig = { rangeStrategy: 'auto' };
-    expect(getRangeStrategy(config)).toBe('pin');
-  });
-});
diff --git a/lib/modules/manager/pip_requirements/range.ts b/lib/modules/manager/pip_requirements/range.ts
deleted file mode 100644
index 463c5442e9022088414a5b39f6460b9e9c816e24..0000000000000000000000000000000000000000
--- a/lib/modules/manager/pip_requirements/range.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import type { RangeStrategy } from '../../../types';
-import type { RangeConfig } from '../types';
-
-export function getRangeStrategy(config: RangeConfig): RangeStrategy {
-  if (config.rangeStrategy === 'auto') {
-    return 'pin';
-  }
-  return config.rangeStrategy;
-}
diff --git a/lib/modules/manager/range.spec.ts b/lib/modules/manager/range.spec.ts
index 1deed5906142faca2d7dae3207f2ed604f77fdd6..0cfbbe5a5176c7373865b99e58075ae535c6205a 100644
--- a/lib/modules/manager/range.spec.ts
+++ b/lib/modules/manager/range.spec.ts
@@ -15,9 +15,8 @@ describe('modules/manager/range', () => {
       manager: 'npm',
       rangeStrategy: 'auto',
       depType: 'dependencies',
-      packageJsonType: 'app',
     };
-    expect(getRangeStrategy(config)).toBe('pin');
+    expect(getRangeStrategy(config)).toBe('replace');
   });
 
   it('defaults to replace', () => {
diff --git a/lib/modules/manager/setup-cfg/index.ts b/lib/modules/manager/setup-cfg/index.ts
index abbb5548e48e94375ece7a4f85b520b95e058ab4..d3143e204145dcc8ea3fe082b1688f4e4c647674 100644
--- a/lib/modules/manager/setup-cfg/index.ts
+++ b/lib/modules/manager/setup-cfg/index.ts
@@ -3,7 +3,6 @@ import { PypiDatasource } from '../../datasource/pypi';
 import { id as versioning } from '../../versioning/pep440';
 
 export { extractPackageFile } from './extract';
-export { getRangeStrategy } from './range';
 
 export const supportedDatasources = [PypiDatasource.id];
 
diff --git a/lib/modules/manager/setup-cfg/range.spec.ts b/lib/modules/manager/setup-cfg/range.spec.ts
deleted file mode 100644
index df75c3e17a282ba32a7ba362e7bef7ac34dde87f..0000000000000000000000000000000000000000
--- a/lib/modules/manager/setup-cfg/range.spec.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import type { RangeConfig } from '../types';
-import { getRangeStrategy } from '.';
-
-describe('modules/manager/setup-cfg/range', () => {
-  it('returns same if not auto', () => {
-    const config: RangeConfig = { rangeStrategy: 'widen' };
-    expect(getRangeStrategy(config)).toBe('widen');
-  });
-
-  it('replaces if auto', () => {
-    const config: RangeConfig = { rangeStrategy: 'auto' };
-    expect(getRangeStrategy(config)).toBe('replace');
-  });
-});
diff --git a/lib/modules/manager/setup-cfg/range.ts b/lib/modules/manager/setup-cfg/range.ts
deleted file mode 100644
index 2487b5d015f24def981cf33c90ad2fc02d0a402c..0000000000000000000000000000000000000000
--- a/lib/modules/manager/setup-cfg/range.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import type { RangeStrategy } from '../../../types';
-import type { RangeConfig } from '../types';
-
-export function getRangeStrategy(config: RangeConfig): RangeStrategy {
-  return !config.rangeStrategy || config.rangeStrategy === 'auto'
-    ? 'replace'
-    : config.rangeStrategy;
-}
diff --git a/lib/modules/manager/types.ts b/lib/modules/manager/types.ts
index e636429e0d29f135270baea59e88a1dae6719b0e..3f8f9fbaaad05e9352c89a2f179bbdca64fce8f9 100644
--- a/lib/modules/manager/types.ts
+++ b/lib/modules/manager/types.ts
@@ -48,7 +48,6 @@ export interface RangeConfig<T = Record<string, any>> extends ManagerData<T> {
   depName?: string;
   depType?: string;
   manager?: string | null;
-  packageJsonType?: 'app' | 'library';
   rangeStrategy: RangeStrategy;
 }
 
@@ -78,7 +77,6 @@ export interface PackageFile<T = Record<string, any>>
   npmrc?: string;
   packageFile?: string | null;
   packageJsonName?: string;
-  packageJsonType?: 'app' | 'library';
   packageFileVersion?: string;
   parent?: string;
   skipInstalls?: boolean;
diff --git a/lib/workers/repository/__fixtures__/package-files.json b/lib/workers/repository/__fixtures__/package-files.json
index ae932d13fc37a8e2a8538250204f49fb3b0d14ec..47449a32a0cc9eec91e900c3ed7bba21d0e48fdb 100644
--- a/lib/workers/repository/__fixtures__/package-files.json
+++ b/lib/workers/repository/__fixtures__/package-files.json
@@ -226,7 +226,6 @@
           "fixedVersion": "2.0.14"
         }
       ],
-      "packageJsonType": "app",
       "managerData": {
         "yarnZeroInstall": false
       },
diff --git a/lib/workers/repository/extract/manager-files.spec.ts b/lib/workers/repository/extract/manager-files.spec.ts
index c81b8a3e1b4d6696d9200e9ae735040fdb29b28a..502ab7a53a2abb047617906702f8f19c43d52243 100644
--- a/lib/workers/repository/extract/manager-files.spec.ts
+++ b/lib/workers/repository/extract/manager-files.spec.ts
@@ -78,7 +78,6 @@ describe('workers/repository/extract/manager-files', () => {
       expect(res).toMatchObject([
         {
           packageFile: 'package.json',
-          packageJsonType: 'app',
           deps: [
             {
               currentValue: '2.0.0',