pykeio/millennium

*Stats are from Tauri and may not be fully accurate

*Stats are from WebKitGTK, WebKit) for smaller, faster, more secure, and less resource-heavy applications compared to Electron

*Stats are from Tauri and may not be fully accurate.




Millennium is a cross-platform webview framework written in Rust. With Millennium, you can design consistent UI that works across all platforms, using HTML, CSS, and JavaScript.

How It Works

You can interact with native code and perform system-level operations, including reading/writing files & networking. It leverages modern operating systems' pre-included webview libraries ( WebKitGTK, WebView2, WebKit) for smaller, faster, more secure, and less resource-heavy applications compared to Electron. A simple Millennium app can be less than 10 MB in size and can be reduced further to less than 2 MB. Millennium apps can launch almost twice as fast as equivalent Electron applications and use as little as 1/4 of the amount of RAM.

Millennium is a fork of Tauri, its official plugins, tao, and wry, with a few added features and changes ✨

Learn more

  • More information: https://millennium.pyke.io/
Join the Discord server!
Issues

Collection of the latest Issues

XFaonAE

XFaonAE

enhancement
Comment Icon8

On CrystalOS GTK isnt used, and so hidden titlebar would not work correctly, instead a command is used to handle that First check if the OS is Crystal by checking to see if OS_CRYSTAL_SKY exists in the env vars.

Then get the x11 window ID from millennium and run this command

sudo-carson

sudo-carson

enhancement
Comment Icon0

This is the last Electron feature required by Allie.

Allie provides macOS binaries for both x64 and ARM64 (Apple Silicon) machines. Running the x64 binary under Rosetta machine translation leads to considerably worse performance compared to the native ARM64 binary.

Millennium should provide a function similar to Electron's runningUnderARM64Translation to check if the application is running under ARM64 translation on macOS so that applications can direct the user to download a native ARM64 release.

sudo-carson

sudo-carson

enhancement
Comment Icon1

Currently, (clean) debug build times are anywhere from 2 minutes to 5 minutes on modern hardware, and non-clean build time with no code changes is ~5s (not great, but that's mostly caused by the linker).

Building with --timings reveals that the windows crate takes ~60s to build and slows the rest of the compilation down. windows-sys is smaller and faster to build and should be used instead.

Versions

Find the latest versions by id

1.0.0-beta.3 - Jul 01, 2022

It's been almost 3 months since the last release of Millennium and a lot has changed!

The next release will likely be v1.0.0 stable, and future releases will have a more consistent schedule.

The focus after this release will be finishing docs and porting over Tauri plugins. We hope to have at least 10 examples and 5 starter templates before the stable release.

What's changed?

Full changelog: 1.0.0-beta.2...1.0.0-beta.3

General

  • Added Electron-like single instance lock
  • Refactored tray features
  • Added system theme APIs
  • Added support for multipart/form-data requests
  • Added methods to set request headers in the updater
  • Decreased binary size by almost 0.4 MB (Windows measurement) by refactoring API endpoints
  • Made global shortcuts and clipboard optional to reduce binary size
  • Improved performance of the extract API
  • Added finer control over CSP directives
  • Support other types of dialogs
  • Provide a JSON schema for .millenniumrc
  • Remove dependency on tempdir
  • Properly reinstall files when downgrading an app via MSI installer
  • Exposed the with_webview API to access the platform webview
  • Allowed updater to configure msiexec display options
  • Force semver versions for updates
  • Made .millenniumrc default to JSON5
  • Fixed sidecar processes not being cleaned up on exit
  • Fixed the HTTP API timeout not working on Windows
  • Fixed centered windows not truly being centered on monitors with a non-zero position
  • Fixed windows loading remote URLs not having a window icon or menu
  • Fixed Pin to Taskbar not being available on Windows
  • Fixed a freeze when using set_size()
  • Fixed nested isolation iframes
  • Fixed Windows showing an annoying small box when selecting text
  • Fixed strings in HTTP forms being serialized incorrectly
  • Fixed a bug where Event::Moved would fire when checking if the window is maximized on macOS
  • Fixed a bug where platform-specific config files weren't being properly read

Core

  • Added support for getting the title of a menu item
  • Implemented set_cursor_position() for Linux
  • Properly scaled the borderless resize inset based on the display's scale factor on Windows and Linux
  • Made the menubar transparent on Linux
  • Added support for getting/setting the window theme on macOS
  • Fixed drag & drop on Windows
  • Fixed movable window backgrounds on macOS

API

  • Added clipboard API
  • Added resolveResource API

WebView

  • Added the ability to enable or disable zooming shortcuts for Windows
  • Added rtwv plugins API
  • Fixed a deadlock when creating a window from an IPC handler
  • Fixed a minor memory leak on macOS
  • Fixed percent-decoding of file drop payload paths
  • Fixed a panic when the inspector window detaches on macOS
  • Fixed using unsupported functions on older macOS versions
  • Fixed a panic when a menu event occurred on a minimized window
  • Fixed a crash on macOS when a custom protocol response was empty
  • Fixed dialogs crashing when the parent window is empty on macOS

CLI

  • Added checks for updates on millennium dev
  • Statically link vcruntime
  • Prevent apps with the default bundle identifier from building
  • Bundled xdg-open in AppImages if dialog APIs are enabled
  • Support for bundling a given appindicator library into an AppImage
  • Cached bundler tools in a common global directory
  • Added a default icon to Linux notifications if none provided
  • Fixed building to/from non-x86 architectures via AppImage on Linux
  • Fixed reading info from yarn v2+
  • Fixed overriding the default macOS keychain
  • Fixed binary extensions for Windows targets
  • Fixed an infinite loop in the dev file watcher
  • Fixed the CLI getting an incorrect terminal size on Windows
  • Refactored CLI logging to use more standard Rust logging

1.0.0-beta.2 - Apr 03, 2022

🎉 v1.0.0-beta.2 is here, and we are close to a stable release 🎉

What's changed?

Full Changelog: https://github.com/pykeio/millennium/compare/1.0.0-beta.1...1.0.0-beta.2

C++ Bindings

C++ bindings are currently experimental, but a very small subset of Millennium APIs are supported and more are coming for 1.0.0-beta.3.

General

  • Added dangerous option to disable compile-time CSP injection
  • Added hotkey to toggle devtools on all platforms
  • Fixed docs.rs build
  • Removed deprecated create_window APIs; use WindowBuilder instead
  • WindowBuilder is now properly exported as a struct instead of a trait
  • Added RunEvent::WindowEvent

Core

  • Fixed windows not closing on Linux (#9)
  • Disabled resizing maximized borderless windows
  • Ability to set macOS activation policy at runtime
  • Fixed random chars being emitted when changing the title of menu items on Windows
  • Now uses present_with_time to focus windows on Linux
  • Fixes set_inner_size making the window bigger than intended on Windows

Webview

  • Disabled resizing maximized borderless windows
  • Fixed a memory leak when using custom protocols on macOS

Webview Runtime

  • Fixed WindowEvent::Destroyed not firing

CLI

  • You can now create a Millennium project with npm init millennium my-app 💫
  • The CLI no longer thinks empty folders are not empty.
  • Fixed latest versions of packages being shown as outdated in millennium info

1.0.0-beta.1 - Mar 28, 2022

🎉 The first release of Millennium 🎉

Changelog

  • Everything 🤔

Information - Updated Aug 02, 2022

Stars: 10
Forks: 1
Issues: 3

Repositories & Extras

Misc

248

A CLI tool to easily get a new project up and running by using pre-made...

A rust cross platform rust boilerplate template to get up and running quickly

A CLI tool to easily get a new project up and running by using pre-made...

HAL : Hyper Adaptive Learning

Rust based Cross-GPU Machine Learning

HAL : Hyper Adaptive Learning

A crossplatform Rust bindings for the soloud audio engine library

Supported formats: wav, mp3, ogg, flac

A crossplatform Rust bindings for the soloud audio engine library

🐏 rpmalloc-rs

Cross-platform Rust global memory allocator using rpmalloc README for a detailed description of how the allocator works, peforms, and compares with other allocators

🐏 rpmalloc-rs

Rust crate providing cross-platform information about the notebook batteries

battery provides a cross-platform unified API to a notebook batteries state

Rust crate providing cross-platform information about the notebook batteries

rust-clipboard is a cross-platform library for getting and setting the contents of the OS-level clipboard

It has been tested on Windows, Mac OSX, GNU/Linux, and FreeBSD

rust-clipboard is a cross-platform library for getting and setting the contents of the OS-level clipboard

A cross platform Rust library for efficiently walking a directory recursively

Comes with support for following symbolic links, controlling the number of

A cross platform Rust library for efficiently walking a directory recursively

debug-here: a cross platform rust debugger hook

Debuggers are a great way to examine the state of a program

debug-here: a cross platform rust debugger hook

Cross-Platform Rust Toolkit for Games 🏹

Android-related tools for building and developing application

Cross-Platform Rust Toolkit for Games 🏹

crossfont is a cross-platform Rust library for loading fonts and rasterizing

glyphs, using native font engines whenever possible

crossfont is a cross-platform Rust library for loading fonts and rasterizing

🐋🦷 Bluey McBluetooth* 🦷🐋

Bluey is a cross-platform Rust API for accessing Bluetooth Low Energy devices

🐋🦷 Bluey McBluetooth* 🦷🐋
Facebook Instagram Twitter GitHub Dribbble
Privacy