Open-source project
itkach/aard2-android avatar
itkach/aard2-android

Aard 2 for Android: a dictionary reader built around local files

Aard2 for Android, a simple dictionary app

567 stars120 forksJavaGPL-3.0

At a glance

What is it?
Aard 2 for Android is a Java rewrite of the Aard dictionary app that reads dictionaries from local files, adds bookmarks, history, user style sheets and MathJax rendering, and is distributed as a signed release rather than a store listing. It suits readers who want offline lookup and control over how articles look, and it asks you to source and convert dictionaries yourself.
Who is it for?
Adopt Aard 2 for Android if you want offline lookup from dictionaries you already hold and value the styling, history and bookmark controls more than a curated store. Do not adopt it if you need one-tap access to a large curated dictionary catalogue, since the app never downloads dictionary files and the work of finding and converting them lands on you.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly Java, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A successor app rather than an update to the old Aard

Aard 2 for Android is a successor to Aard Dictionary for Android, and it is not a drop in replacement. The README lists what changed: a redesigned user interface, bookmarks, history, and a better dictionary storage format, which is the slob format maintained in a separate repository by the same author.

That is the shape of the whole project. It is a dictionary reader first and foremost, a viewer for dictionary files that live on the device, with the surrounding conveniences that a reader actually wants: a way to go back to what you looked up, a way to keep what matters, and a way to make the text legible on the screen you are holding.

The application is written in Java, and the repository layout shows a conventional Android project. There is a root `AndroidManifest.xml`, a `build.gradle` and `settings.gradle` for Gradle, the `gradlew` wrapper scripts for a Unix and a Windows machine, `src/` for the sources, `res/` for resources, `assets/` for bundled assets, `appicon/` for the launcher icon, and a `test/` directory. There is also a `scripts/` directory, a `githooks/` directory, a `source-deps.json` file, and a `gradle.properties`.

Two root files are worth a second look before you install anything. `LICENSE.txt` holds the GPL-3.0 licence, which is a copyleft licence and a heavier obligation than a permissive one if you intend to modify and redistribute the app. `PRIVACY.org` sits next to it, and a privacy file shipped in the source tree is a better starting point than a store listing's privacy blurb.

The repository is not archived and the last push was on 2026-10-22. Release 0.59 came out on 2026-10-04, after a long quiet stretch in which version 0.58 shipped on 2024-07-16 and 0.57 on 2024-05-19.

Dictionaries come from you, through the document chooser

The single most important operational fact about this app is stated in the dictionary management section: the application itself does not download dictionary files. Dictionaries are added by selecting files with Android's document chooser, and a separate link in the download section points to a wiki page listing dictionaries.

That constraint is the app's main trade-off, and it cuts both ways. On the positive side there is no store listing, no account, no telemetry tied to a catalogue, and no dependency on somebody else's server staying up. Your dictionaries are files you chose, and the app reads them.

On the negative side, the user carries the whole pipeline. You need a dictionary in the slob format, which means an existing slob file or a conversion from whatever format you have, and the documentation does not describe a conversion path inside the app. If you are starting from a plain word list or a scraped database, that work happens outside Aard 2.

Dictionary handling is otherwise thorough. Opened dictionaries can be reordered by dragging the handle at the right of each row, and lookup results of equal match strength from multiple dictionaries are presented in the order the dictionaries appear in that list, so the order is a search ranking you control rather than an arbitrary one. Each dictionary can be marked to also be used for random article lookup, and dictionaries can be deactivated.

A deactivated dictionary is not deleted, and the behaviour is specific in a useful way: a turned off dictionary does not participate in word lookup or random article lookup, but it is still available when you open an article from bookmarks or history, or when you follow a link inside another article. That distinction matters for cross-dictionary links. Removing a dictionary from the program entirely is also possible, and the README is explicit that the dictionary files themselves are not deleted.

Lookup is punctuation, diacritics and case insensitive

The lookup behaviour is described in one line, and it is the line that decides whether a dictionary feels good to use: queries are punctuation, diacritics and case insensitive.

Each of those three is a real problem in a dictionary app. Case insensitivity means a capitalised search finds a lowercase headword. Diacritic insensitivity means typing a word without accents still finds the accented entry, which matters enormously for anyone typing quickly on a phone keyboard where accent keys are not obvious. Punctuation insensitivity means a hyphen or an apostrophe in a search does not defeat the match, which is the difference between finding a headword and getting nothing.

Three insensitive behaviours together are a deliberate design choice, and the cost is that a search returns more than a literal string comparison would. A user who wants to disambiguate two headwords that differ only by diacritics, say a word that exists in two spellings, has fewer tools to narrow the result than a user of a literal matcher.

The article reader supports following links between articles, and the way dictionaries relate to each other at that point is what the deactivation rule above supports. A link into a deactivated dictionary still resolves, which means a dictionary set can be trimmed for lookup speed without breaking navigation inside articles that reference it.

History and bookmarks are capped at a thousand items

Visited articles are added to history automatically and appear in a History tab, and an article can be bookmarked by tapping the Bookmark icon while viewing it, which puts it in a Bookmarks tab. Both lists can be filtered and sorted by time or by article title.

The limit is the part to plan around. Both bookmarks and history are limited to a thousand most recently used items. For history that is generous. For bookmarks it is a real constraint, because a bookmark list is by nature a curated set that grows over months, and a thousand entries is reachable for someone who is serious about a large language. Since the cap is on the most recently used items, a bookmark created long ago and never revisited can fall off the end, and the documentation does not describe a way to export the list or to raise the limit.

Deletion is where the app shows its mobile ergonomics. A single bookmark or history record is removed by swiping the list item left or right. Several records can be removed at once by long tapping a list item to enter selection mode, tapping the items to be removed, tapping the Trash Can icon and confirming. A bookmark can also be removed by tapping the Bookmark icon while viewing the article, which is the same action that created it.

The two removal paths are worth distinguishing, because they behave differently. Swiping and the selection mode are about the list; the Bookmark icon is about the article, so it removes the bookmark regardless of which list you happen to be looking at when you open the article.

User style sheets let you restyle a dictionary you did not author

Dictionaries may include their own alternate style sheets, and the article menu's `Style...` entry lists the dictionary's built-in styles alongside any user styles you have added. The examples the project ships are plain CSS files in an `examples/` directory, and the README names three of them with what each is for: a dark version of any dictionary for dictionaries that lack a dark style of their own, a version of any dictionary in shades of gray, and a beige background with dark brown text aimed at Wikipedia, Wiktionary and other MediaWiki based dictionaries.

The mechanism is straightforward. You download a style file and add it with Settings, then User Styles, then Add. A user style is named after its file without the `.css` extension, so `dark.css` appears as `dark`.

This is the feature that most distinguishes Aard 2 from a plain reader, and it is worth understanding the division of labour. The dictionary author controls the built-in styles, and you control the user styles. When a dictionary has no dark variant, you do not wait for the author to add one, you attach a dark sheet yourself. When a dictionary has a built-in style you dislike, you can add your own without removing theirs, and the menu shows both.

Text size is handled separately and more simply, with a slider available as `Text size` in the article menu. That is a sensible split: size is a display property of the app, while colour and typeface belong to the document's presentation, and a style sheet can change the latter without the app having to know anything about it.

Rendering choices: MathJax for formulas, Material You for chrome

Two rendering decisions shape how articles look. The first is mathematical formulas, which in Wikipedia articles are rendered as text using MathJax, described as scalable and styleable on any screen. Rendering formulas as live text rather than as images means they follow the system text size, which matters on a phone.

The second is the app's own colours. Aard 2 follows the device's system colours under Material You, and its accent and surface colours are derived from the current system theme. So the app chrome, the parts that are not dictionary content, matches the rest of the phone, while the article body is governed by the dictionary's own style sheet. The two layers stay separate, which is why a dark system theme does not force a light article.

The reading mode is also more considered than a single toggle. Articles can be viewed in full screen for distraction free reading, toggled from the article menu, with a floating button in the corner that brings the toolbar back. With the device held horizontally, articles switch to full screen automatically, and that automatic switch can be turned off in settings. While scrolling a long article, a floating button appears in the corner to jump back to the top.

Volume buttons are also repurposed, which is the kind of detail that only shows up in an app with a large reading audience. When viewing an article, volume up and down scroll the content, or, at the bottom or top of the page, move to the next or previous article. A long press scrolls all the way to the bottom or top. In the main view the volume buttons cycle through the tabs, and this behaviour can be disabled in settings. It is a good fit for one-handed reading, and it is also the kind of thing that will surprise you if you do not know it is there, which is why the settings switch matters.

What you give up, and how to get the app onto a device

There is no store listing in the README. The download section links to the releases page of the repository for Aard 2 for Android itself, and to a wiki page for dictionaries, and the project is built and versioned with Gradle, with the wrapper scripts committed so a build does not need a system Gradle install. There is no command line install documented, so the practical route is to fetch a release artefact from the releases page and install it on the device, and to consult the `scripts/` directory and `source-deps.json` in the repository if you intend to build from source.

The limitations follow from the design rather than from neglect. There is no built-in dictionary download, so a first run has an empty app until you supply files, and no in-app format conversion, so the slob format is a hard requirement. The bookmark cap of a thousand items has no documented escape hatch. Random article lookup is limited to a random title found in an active dictionary, and can optionally be restricted to dictionaries marked for it, so it depends on your dictionary content being rich enough for random browsing to be interesting. Turned off dictionaries still load for article viewing, which is helpful but also means a large dictionary set has a real cost in lookup time.

The alternative approach to Aard 2 is a general purpose reader app that bundles or downloads a large curated dictionary for you. The difference is where the work sits: there the vendor curates the catalogue and handles formats, here you own the files and the format, and in exchange nothing is downloaded behind your back and the styling is genuinely yours to control.

Editorial conclusion

Adopt Aard 2 for Android if you want offline lookup from dictionaries you already hold and value the styling, history and bookmark controls more than a curated store. Do not adopt it if you need one-tap access to a large curated dictionary catalogue, since the app never downloads dictionary files and the work of finding and converting them lands on you. Before switching, confirm that your dictionaries are in the slob storage format, then install the release from the project's releases page, add a dictionary through the document chooser, and read the `PRIVACY.org` file to see what the app says about the data it keeps on the device.

Frequently asked questions

How do I get dictionaries for Aard 2 for Android?

The application itself does not download dictionary files. You add them by selecting dictionary files with Android's document chooser, and a wiki page linked from the README lists available dictionaries in the slob storage format.

Does Aard 2 for Android search work without accents and capital letters?

Yes. The README states that lookup queries are punctuation, diacritics and case insensitive, so an accented or capitalised query still finds the matching headword.

How do I change the colours of an article in Aard 2 for Android?

Add a CSS file through Settings, then User Styles, then Add; it is named after its file without the `.css` extension. The project ships example sheets such as `examples/dark.css`, `examples/grayscale.css` and `examples/beige.css` in the repository, and the article menu's `Style...` entry lists built-in dictionary styles alongside your own.

What is the limit on bookmarks and history in Aard 2 for Android?

Both bookmarks and history are limited to a thousand most recently used items. Single records are removed by swiping the list item, and multiple records by long tapping to enter selection mode and using the Trash Can icon.

How is Aard 2 for Android distributed, and what licence does it use?

There is no store listing mentioned in the README; the app is downloaded from the project's GitHub releases page, and the repository is licensed under GPL-3.0 with the text in `LICENSE.txt`. A `PRIVACY.org` file is also included in the source tree.

Official sources

  1. Issues
  2. itkach/aard2-android on GitHub
  3. License: GPL-3.0
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/itkach-aard2-android.svg)](https://hysenlabs.com/projects/itkach-aard2-android)

Was this useful?