NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1982 most downloaded on PyPI
Python wrapper for the arXiv API
Last release 2 months ago
31 Jul 2026
Release timing varies
gaps range from 2 weeks to 10 months
Most releases are documented
notes for 35 of 45 stable releases
Nothing withdrawn
no release was ever pulled
11 years old
46 releases · first in 2015
Bump idna from 3.11 to 3.15 by @dependabot [bot] in #211
Full Changelog: 4.0.0...4.0.1
One column per quarter.
Drop deprecated APIs by @lukasschwab in #210
Search.results removed — use Client.results(search).Result.download_pdf / Result.download_source removed — use result.pdf_url / result.source_url() directly (see the new README example using urllib.request.urlretrieve).arxiv.arxiv import shim removed — use import arxiv.Search(max_results=math.inf) no longer means "all results" — use max_results=None.<title>0</title> by @lukasschwab in #207user-agent header is now arxiv.py/{installed-version} (was hardcoded arxiv.py/2.3.2).Apologies for the back-to-back major releases. These changes should have been included in the 3.0.0 release.
Full Changelog: 3.0.0...4.0.0
Bump filelock from 3.19.1 to 3.20.3 by @dependabot [bot] in #193
Search.max_results to 100 by @lukasschwab in #142Full Changelog: 2.4.1...3.0.0
Make ArxivError and subclasses picklable by @lukasschwab in #192
Full Changelog: 2.4.0...2.4.1
Use uv in development by @lukasschwab in #190
Revert "Fallback to /pdf/ string match: missing titles ( #185 )" by @lukasschwab in #187
/pdf/ string match: missing titles (#185)" by @lukasschwab in #187Full Changelog: 2.3.1...2.3.2
Nothing published for this version
Fallback to /pdf/ string match: missing titles by @lukasschwab in #185
/pdf/ string match: missing titles by @lukasschwab in #185Full Changelog: 2.3.0...2.3.1
Deprecate download helpers by @lukasschwab in #178
Full Changelog: 2.2.0...2.3.0
Change range of supported Python versions: 3.9...3.13 (drop 3.7, 3.9)
Full Changelog: 2.1.3...2.2.0
Use Optional type hints where appropriate by @lukasschwab in #168
Optional type hints where appropriate by @lukasschwab in #168Full Changelog: 2.1.2...2.1.3
Loosen requirements in setup.py by @kgleba in https://github.com/lukasschwab/arxiv.py/pull/165
setup.py by @kgleba in https://github.com/lukasschwab/arxiv.py/pull/165Full Changelog: https://github.com/lukasschwab/arxiv.py/compare/2.1.1...2.1.2
Bump requests from 2.31.0 to 2.32.0 by @dependabot in https://github.com/lukasschwab/arxiv.py/pull/159
Patch.
~= by @lukasschwab in https://github.com/lukasschwab/arxiv.py/pull/162ruff by @lukasschwab in https://github.com/lukasschwab/arxiv.py/pull/147requests.Session.get in TestClient by @lukasschwab in https://github.com/lukasschwab/arxiv.py/pull/150Full Changelog: https://github.com/lukasschwab/arxiv.py/compare/2.1.0...2.1.1
Deprecates submodule-style imports for the base package: import arxiv.arxiv and from arxiv import arxiv. Use import arxiv.
Deprecating change.
Deprecates submodule-style imports for the base package: import arxiv.arxiv and from arxiv import arxiv. Use import arxiv.
__init__.py by @lukasschwab in https://github.com/lukasschwab/arxiv.py/pull/141Full Changelog: https://github.com/lukasschwab/arxiv.py/compare/2.0.0...2.1.0
Previously deprecated Client.get/Search.get removed in #137
Breaking change.
Client.get/Search.get removed in #137max_results/delay_seconds replaced in #138
UnexpectedEmptyPageError and HTTPError constructor signatures changed in #136
User-Agent header on the API requestrequestsClient-encapsulated session reusefeedparser no longer swallows connection errors; instead, retry per Client behaviorSearch.results deprecated: prefer Client.results with client reuse.setup-python@v4, cache pip dependencies in https://github.com/lukasschwab/arxiv.py/pull/133feedparser==6.0.6 in https://github.com/lukasschwab/arxiv.py/pull/135Full Changelog: https://github.com/lukasschwab/arxiv.py/compare/1.4.8...2.0.0
Adapt pdoc docs.yml docs-deploy workflow by @lukasschwab in https://github.com/lukasschwab/arxiv.py/pull/113
Nonbreaking change.
pdoc build, eliminate nav badges by @lukasschwab in https://github.com/lukasschwab/arxiv.py/pull/115/ with _ in legacy-format IDs in download filenames by @lukasschwab in https://github.com/lukasschwab/arxiv.py/pull/118Full Changelog: https://github.com/lukasschwab/arxiv.py/compare/1.4.7...1.4.8
Nonbreaking change. No logical changes from 1.4.6.
Nonbreaking change. No logical changes from 1.4.6.
Move linting from flake8 to ruff by @lukasschwab in https://github.com/lukasschwab/arxiv.py/pull/110
Nonbreaking change.
Full Changelog: https://github.com/lukasschwab/arxiv.py/compare/1.4.5...1.4.6
Disambiguate generic list type hints by @lukasschwab in https://github.com/lukasschwab/arxiv.py/pull/109
Nonbreaking change.
list type hints by @lukasschwab in https://github.com/lukasschwab/arxiv.py/pull/109Fix docstring: updated and published are datetimes (#106, #107)
Nonbreaking change.
updated and published are datetimes (#106, #107)NOTE: this tag should really point to 67b02aa. The tagged commit has the wrong version number in setup.py.
NOTE: this tag should really point to 67b02aa. The tagged commit has the wrong version number in setup.py.
Nonbreaking change.
Run retries recursively to sleep between erroneous responses
Nonbreaking change.
id_list IDs (#81)Extract result.comment from entry.get('arxiv_comment)' rather than entry.get('comment')
Nonbreaking change.
result.comment from entry.get('arxiv_comment)' rather than entry.get('comment') (#79)Returns fully-qualified pre-March 2007 IDs from get_short_id (76)
Breaking change.
get_short_id (76)HTTPError constructor (not meant for external use): now takes the full feedparser.FeedParserDict rather than just a HTTP response status (77)Deprecates (Search).get and (Client).get; use (Search).results and (Client).results
Deprecating change.
(Search).get and (Client).get; use (Search).results and (Client).results (#69)Nonbreaking changes:
"0" (#72)Implements __eq__ for equality-checking:
Breaking change.
__eq__ for equality-checking: (#64)
Results using (Result).entry_idResult.Authors using (Result.Author).nameResult.Links using (Result.Link).hrefNonbreaking changes:
__repr__ methods to include quotes around string arguments. (#64)Removes (Result).get_pdf_url(); use (Result).pdf_url
Breaking change.
(Result).get_pdf_url(); use (Result).pdf_url (#59)
(Result).get_pdf_url() functionality moved to (Result)._get_pdf_url(), which is used to populate (Result).pdf_url in the Result constructor.Result.Author.__init__ becomes Result.Author._from_feed_author.Result.Link.__init__ becomes Result.Link._from_feed_link.(Result).updated and (Result).published from time.struct_times to datetimes (#58)Nonbreaking:
__str__ and __repr__ methods to non-enum classes (#61).Add (Result).doi and (Result).journal_ref, fields that were available before the v1 release.
Nonbreaking change.
(Result).doi and (Result).journal_ref, fields that were available before the v1 release.(Result)._raw for debugging purposes.Call time.sleep more conservatively: instead of sleeping for self.delay_seconds before every request,
Nonbreaking change.
time.sleep more conservatively: instead of sleeping for self.delay_seconds before every request,
self.delay_seconds have not already passed (e.g. while processing the previous page), andself.delay_seconds.Breaking changes: all old interfaces removed.
Breaking changes: all old interfaces removed.
Client, Search, and Result.ArxivError, UnexpectedEmptyPageError, HTTPError.list(generator) instead if needed.start values (pagination offset) besides 0.Minor changes:
flake8 and test in GitHub Actions.Fix bug: _prune_result was a no-op.
Nonbreaking change.
_prune_result was a no-op.Adds the prefer_source_tarfile argument to download.
Nonbreaking change.
prefer_source_tarfile argument to download.Nonbreaking; unit test improvements.
Nonbreaking; unit test improvements.
pytest-runner installation requirement.numpy to the list of unit test requirements.API changes: + Add start parameter + Rename search_query → query
API changes:
search_query → queryNothing published for this version
Nothing published for this version
Nothing published for this version
Add support for user-defined download slug functions.
Add support for user-defined download slug functions.
Nothing published for this version
Nothing published for this version
Adds id_list functionality to query(), as described in the arXiv API documentation. Adds minor functionality for download filenames.
Adds id_list functionality to query(), as described in the arXiv API documentation. Adds minor functionality for download filenames.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →