Skip to main content

Read, write, and create Windows .lnk shortcut files (local, UNC, and UWP).

Project description

pylynxley

Python Platform License Coverage

Tooling: Ruff Basedpyright Ty Pytest Coverage

Quality and Security: Vulture Deptry Detect Secrets

Content and Config: Yamllint Yamlfmt Markdownlint mdformat Taplo

Python library for reading and writing Windows shortcut files (.lnk).

This project modernizes the pylnk3 approach for current Python and expanded shortcut coverage. It parses .lnk files into a typed Lnk object, supports edits and round-trip saving, and provides convenience constructors for creating new links.

Highlights

  • Parse, inspect, and rewrite existing .lnk files.
  • Create local, UNC, and UWP shortcuts with a unified API.
  • Resolve target paths from LinkInfo, IDList, and ExtraData consistently.
  • Test-backed behavior with local/network/UWP fixture coverage.

Supported scenarios:

  • Local file/folder shortcuts.
  • Remote UNC shortcuts.
  • UWP application shortcuts.
  • Mixed link data where LinkInfo, IDList, and ExtraData are reconciled.

Requirements

  • Python 3.14+

Install

From this repository:

pip install -e .

For development:

pip install -e .[dev]

Quick Start

from pathlib import Path

from pylynxley.lnk import Lnk

lnk = Lnk.from_file(Path("example.lnk"))
print(lnk.path)

created = Lnk.create_local(target=r"C:\\Windows\\explorer.exe", description="Explorer")
created.save(Path("explorer.lnk"))

CLI

The CLI supports parse and create flows for local, remote, and UWP links.

Run it as a module:

python -m pylynxley.lnk --help

Parse existing .lnk file

python -m pylynxley.lnk parse LINK_FILE

Prints core fields (flags, show mode, resolved path, working directory, arguments) and diagnostics for LinkInfo, IDList, and ExtraData.

Create local .lnk file

python -m pylynxley.lnk create-local TARGET OUT_FILE \
  [--desc TEXT] [--args TEXT] [--icon ICON_PATH] [--workdir DIR] \
  [--window {normal,max,min}]

Create remote (UNC) .lnk file

python -m pylynxley.lnk create-remote UNC_PATH OUT_FILE [--desc TEXT]

Create UWP .lnk file

python -m pylynxley.lnk create-uwp PACKAGE_FAMILY TARGET OUT_FILE \
  [--location PATH] [--logo44 PATH] [--desc TEXT]

CLI examples

python -m pylynxley.lnk parse src/pylynxley/tests/examples/local_file.lnk
python -m pylynxley.lnk create-local C:\Windows\explorer.exe \
  explorer.lnk --window max
python -m pylynxley.lnk create-remote \
  \\192.168.1.1\share\file.doc share-doc.lnk
python -m pylynxley.lnk create-uwp \
  Microsoft.WindowsCalculator_8wekyb3d8bbwe \
  Microsoft.WindowsCalculator_8wekyb3d8bbwe!App calc.lnk

Python API

from pathlib import Path

from pylynxley.lnk import Lnk

# Read and inspect an existing shortcut
lnk = Lnk.from_file(Path("example.lnk"))
print(lnk.path)

# Create and save a local shortcut
new_lnk = Lnk.create_local(
    target=r"C:\Windows\explorer.exe",
    description="Explorer",
)
new_lnk.save(Path("explorer.lnk"))

Limitations

  • Windows-focused behavior.
  • This project targets shell link formats covered by the test fixtures, not every shortcut variant in the Windows ecosystem.

Tests

uv run pytest --doctest-modules
uv run pytest --doctest-modules --cov=src/pylynxley --cov-report=term-missing

Notes

  • Behavior is validated against local, network, and UWP fixture shortcuts in src/pylynxley/tests/examples.
  • CLI entrypoint behavior is covered by dedicated tests.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pylynxley-2026.4.10.3.tar.gz (33.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pylynxley-2026.4.10.3-py3-none-any.whl (47.8 kB view details)

Uploaded Python 3

File details

Details for the file pylynxley-2026.4.10.3.tar.gz.

File metadata

  • Download URL: pylynxley-2026.4.10.3.tar.gz
  • Upload date:
  • Size: 33.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for pylynxley-2026.4.10.3.tar.gz
Algorithm Hash digest
SHA256 2099f10c4f6bf0f74d73ed74ca383ca1bb3aa66fbeb46c4a4e1dae582719ba88
MD5 619824ae94959d69cecaded7fa48cc90
BLAKE2b-256 bef6e0c003b12422c78f3446b23933e29d5aa3315d65c0ed958384f147a2f031

See more details on using hashes here.

File details

Details for the file pylynxley-2026.4.10.3-py3-none-any.whl.

File metadata

  • Download URL: pylynxley-2026.4.10.3-py3-none-any.whl
  • Upload date:
  • Size: 47.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for pylynxley-2026.4.10.3-py3-none-any.whl
Algorithm Hash digest
SHA256 5b288878f5225d6521227feb0188e28095096b71495add124199aa1a3ccc41e3
MD5 59a25d8879f04255e09a890814070e86
BLAKE2b-256 9908195203b9c60b74000204463ced1eec6c5561927c782e4af3237bea28ba21

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page