Diverk is a simple app that allows you to browse a GitHub repository on your Android device. It renders markdown files and is thus mainly used to access personal notes or documentation written in this format.
It is available on Google Play and on the web.
It is able to access private repositories when given a valid access token. We recommend using fine-grained access tokens for this purpose.
Note that the app uses the GitHub API and is thus subject to rate limiting. Without a token, the rate limit is 60 requests per hour. It roughly corresponds to 60 pages per hour. It should be enough for quickly looking up something. But for more intensive use, we recommend using a token.
Using a token increases the rate limit to 5,000 requests per hour. More information about rate limits is available in the GitHub documentation. Additionally, to be able to search in a repository, a token is mandatory. This uses the search code feature of the GitHub API. For this specific feature, the rate limit is 10 searches per hour.
The app is written in Haskell with Reflex and compiled to
WebAssembly using the GHC WebAssembly backend. It is a fully
client-side single-page app. There is no backend. The toolchain
(wasm32-wasi-ghc, wasm32-wasi-cabal, node, ...) is provided by a Nix
flake wrapping ghc-wasm-meta.
The default shell uses a native GHC toolchain with jsaddle-warp to run the app directly in the browser without a WebAssembly compile step. ghcid watches for source changes and reloads the server automatically.
$ nix develop .#native
$ just native-devThis builds the CSS (Tailwind + FontAwesome) and starts a hot-reloading server at http://localhost:3000. Note that this doesn't work with Firefox, only Chrome.
To test the production code path (compiled to WebAssembly):
$ nix develop .#wasm
$ just wasm-runThis builds the CSS, compiles the frontend to WebAssembly, and starts a server
at http://localhost:3000. To recompile only the Haskell and skip the CSS
step: just wasm-dev.
$ nix buildProduces an optimised, self-contained web app in result/. From the .#wasm
shell, serve it with:
$ node serve.mjs resultSet up mobile/android/keystore.properties (see
mobile/android/keystore.properties.example) for release signing, then:
$ nix develop .#wasm
$ just android-debug # debug APK, auto-signed, installable via adb
$ just android-release # release APK, requires keystore.propertiesjust android-debug outputs to
mobile/android/build/android/app/outputs/apk/debug/app-debug.apk.
Install with adb install -r <path>.
To build a release AAB for the Play Store:
$ nix build .#android-release-aab