Skip to content
SolaraStudioPublic

About

A minimal browser for android

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Solara

A minimal, privacy-first Android browser. Built with Kotlin and Jetpack Compose, powered by our own rendering and JavaScript engines.


What it is

Solara is a browser for Android that does not rely on Chromium, WebView, or any third-party rendering engine. It uses Optima (our Rust rendering engine) to parse HTML and CSS, Solarium (our Zig Runtime engine) to run scripts, and Solarian (our Kotlin search API) for search.

The goal is a browser that is:

  • Small. No 200 MB engine dependencies.
  • Fast. Native rendering, no bridge overhead.
  • Private. No telemetry, no accounts, no tracking.
  • Beautiful. Material 3, glass-morphism, quiet design.

Solara is the flagship browser for the SolaraStudio ecosystem. For older devices, see Solaria.


Architecture

Solara is a thin Android shell around two native engines.

Layer Component Language Responsibility
1. UI Solara UI Kotlin · Compose Screens, tabs, toolbar, theme, gesture handling
2. State ViewModels Kotlin · Coroutines StateFlow, business logic, lifecycle
3. Data Repositories Kotlin Room, DataStore, caching, preferences
4. Bridge JNI Bridge Kotlin ↔ C ABI Native calls, callbacks, handle table
5. Engine —> Render Optima Rust HTML parse · CSS cascade · DOM · layout · paint
6. Engine —> Runtime Solarium Zig Runtime · event loop · DOM bindings
7. Service Solarian Kotlin Search providers, suggestions
8. Surface SurfaceView Android GPU-backed render target
  • Optima — rendering engine. Rust.
  • Solarium — runtime engine. Zig.
  • Solarian — search provider API. Kotlin.

Solara itself does not implement HTML, CSS, or JavaScript. It provides the UI shell, state management, and native integration.


Screenshots

To be added.


Requirements

To build Solara you need:

  • JDK - 17 or later
  • Android SDK - with platform 36 and build-tools 36.0.0
  • Android NDK - 25.1.8937393 (for building Optima and Solarium)
  • Rust 1.85+ with the four Android targets
  • Zig 0.14+ (for building Solarium)
  • Gradle 9.5 (included via wrapper)

Building

Clone

git clone https://github.com/SolaraStudio/Solara.git
cd Solara

Configure credentials

Solara depends on prebuilt Optima artifacts hosted on GitHub Packages. Add your credentials to ~/.gradle/gradle.properties:

GITHUB_ACTOR=your-github-username
GITHUB_TOKEN=ghp_your_personal_access_token

The token needs the read:packages scope.

Build the app

cd android
./gradlew assembleRelease

Output:

android/app/build/outputs/apk/release/app-release.apk

For a debug build:

./gradlew assembleDebug

Build with a specific ABI

./gradlew assembleRelease -Pabi=arm64-v8a

Supported ABIs: arm64-v8a, armeabi-v7a, x86, x86_64.


Project structure

Solara/
├── android/                  Android application
│   ├── app/                  Application module
│   │   └── src/main/
│   │       ├── java/com/solara/browser/
│   │       │   ├── data/     Room, DataStore, repositories
│   │       │   ├── domain/   Models, use cases
│   │       │   ├── engine/   JNI bindings to Optima and Solarium
│   │       │   ├── ui/       Compose screens, components, theme
│   │       │   └── di/       Hilt modules
│   │       ├── res/          Resources
│   │       └── jniLibs/      Native libraries (populated at build time)
│   ├── build.gradle.kts
│   └── settings.gradle.kts
├── docs/                     Architecture and design notes
├── scripts/                  Build and maintenance scripts
└── README.md

Configuration

Settings are exposed in the app itself. For development, the following environment variables are recognised during build:

Variable Purpose
APP_VERSION Override version name
OPTIMA_VERSION Optima artifact version to depend on
VERSION_SUFFIX Append a suffix to the version (e.g. -SNAPSHOT)

Testing

cd android
./gradlew test
./gradlew connectedAndroidTest

Contributing

Contributions are welcome. Before starting, please read CONTRIBUTING.md.

For larger changes, open an issue first so we can align on the approach before you write code.

The process:

  1. Fork the repository.
  2. Create a feature branch.
  3. Make your changes, with tests where reasonable.
  4. Run ./gradlew check locally.
  5. Open a pull request.

Related repositories

Repository Purpose
Solaria Android browser for older devices
Optima Rendering - engine (Rust)
Solarium Runtime - engine (Zig)
Solarian Search provider API (Kotlin)
web Website
docs Documentation

Acknowledgements

Solara stands on the work of others:

And the engines that make it a browser:


License

Solara is licensed under the Mozilla Public License 2.0. See LICENSE for the full text.

About

A minimal browser for android

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors