Build light & secure cross-platform applications with a web-based UI

Overview
Millennium Icon by XFaon. *Stats are from Tauri and may not be fully accurate.

GitHub Workflow Status Audit Status GitHub commit activity Crates.io Discord


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

Join the Discord server!
Comments
  • Hidden titlebar support for Crystal OS

    Hidden titlebar support for Crystal OS

    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

    os-crystal-sky --hint-w TitleBar --hint-v false --hint-wid <X11WindowID>
    
    enhancement p: low stale 
    opened by ghost 12
  • [feat] Support for webview overlay

    [feat] Support for webview overlay

    Could there be a function to overlay a separate webview ontop of the current one, just like electron's BrowserView class, this could be used to code browsers etc... in millennium if an IFrame is not enough. This also alows usage of devtools etc..

    opened by ghost 3
  • [feat] New methods for CXX bindings

    [feat] New methods for CXX bindings

    • [x] Hide title bar before run
    • [x] Open dev tools
    • [x] Close window
    • [x] On window move
    • [x] On window close
    • [x] On window resize
    • [ ] ~~On window full screen~~
    • [ ] ~~On window maximize~~
    • [ ] ~~On window minimize~~
    • [ ] ~~On window unmaximize~~
    • [ ] ~~On window not responding~~
    • [x] Enable/disable always-on-top windows
    • [x] Support for IPC communication from renderer and C++
    • [x] Support for dynamically creating and destroying windows programmatically
    • [x] Support for setting the window URL dynamically
    enhancement p: med 
    opened by ghost 2
  • Improve build times by using `windows-sys`

    Improve build times by using `windows-sys`

    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.

    enhancement help wanted p: low 
    opened by sudo-carson 2
  • RUSTSEC-2021-0139: ansi_term is Unmaintained

    RUSTSEC-2021-0139: ansi_term is Unmaintained

    ansi_term is Unmaintained

    | Details | | | ------------------- | ---------------------------------------------- | | Status | unmaintained | | Package | ansi_term | | Version | 0.12.1 | | URL | https://github.com/ogham/rust-ansi-term/issues/72 | | Date | 2021-08-18 |

    The maintainer has adviced this crate is deprecated and will not receive any maintenance.

    The crate does not seem to have much dependencies and may or may not be ok to use as-is.

    Last release seems to have been three years ago.

    Possible Alternative(s)

    The below list has not been vetted in any way and may or may not contain alternatives;

    See advisory page for additional details.

    security p: low 
    opened by github-actions[bot] 1
  • link to docs?

    link to docs?

    The readme points to https://millennium.pyke.io/ which doesn't seem like it is related to millennium itself. It seems like https://github.com/pykeio/millennium/blob/main/docs/docs/main/intro.md should be served somewhere?

    bug documentation p: high 
    opened by wez 1
  • RUSTSEC-2020-0016: `net2` crate has been deprecated; use `socket2` instead

    RUSTSEC-2020-0016: `net2` crate has been deprecated; use `socket2` instead

    opened by github-actions[bot] 1
  • RUSTSEC-2020-0071: Potential segfault in the time crate

    RUSTSEC-2020-0071: Potential segfault in the time crate

    Potential segfault in the time crate

    | Details | | | ------------------- | ---------------------------------------------- | | Package | time | | Version | 0.1.43 | | URL | https://github.com/time-rs/time/issues/293 | | Date | 2020-11-18 | | Patched versions | >=0.2.23 | | Unaffected versions | =0.2.0,=0.2.1,=0.2.2,=0.2.3,=0.2.4,=0.2.5,=0.2.6 |

    Impact

    Unix-like operating systems may segfault due to dereferencing a dangling pointer in specific circumstances. This requires an environment variable to be set in a different thread than the affected functions. This may occur without the user's knowledge, notably in a third-party library.

    The affected functions from time 0.2.7 through 0.2.22 are:

    • time::UtcOffset::local_offset_at
    • time::UtcOffset::try_local_offset_at
    • time::UtcOffset::current_local_offset
    • time::UtcOffset::try_current_local_offset
    • time::OffsetDateTime::now_local
    • time::OffsetDateTime::try_now_local

    The affected functions in time 0.1 (all versions) are:

    • at
    • at_utc
    • now

    Non-Unix targets (including Windows and wasm) are unaffected.

    Patches

    Pending a proper fix, the internal method that determines the local offset has been modified to always return None on the affected operating systems. This has the effect of returning an Err on the try_* methods and UTC on the non-try_* methods.

    Users and library authors with time in their dependency tree should perform cargo update, which will pull in the updated, unaffected code.

    Users of time 0.1 do not have a patch and should upgrade to an unaffected version: time 0.2.23 or greater or the 0.3 series.

    Workarounds

    No workarounds are known.

    References

    time-rs/time#293

    See advisory page for additional details.

    security 
    opened by github-actions[bot] 1
  • RUSTSEC-2020-0159: Potential segfault in `localtime_r` invocations

    RUSTSEC-2020-0159: Potential segfault in `localtime_r` invocations

    Potential segfault in localtime_r invocations

    | Details | | | ------------------- | ---------------------------------------------- | | Package | chrono | | Version | 0.4.19 | | URL | https://github.com/chronotope/chrono/issues/499 | | Date | 2020-11-10 |

    Impact

    Unix-like operating systems may segfault due to dereferencing a dangling pointer in specific circumstances. This requires an environment variable to be set in a different thread than the affected functions. This may occur without the user's knowledge, notably in a third-party library.

    Workarounds

    No workarounds are known.

    References

    See advisory page for additional details.

    security 
    opened by github-actions[bot] 1
  • RUSTSEC-2022-0048: xml-rs is Unmaintained

    RUSTSEC-2022-0048: xml-rs is Unmaintained

    xml-rs is Unmaintained

    | Details | | | ------------------- | ---------------------------------------------- | | Status | unmaintained | | Package | xml-rs | | Version | 0.8.4 | | URL | https://github.com/netvl/xml-rs/issues | | Date | 2022-01-26 |

    xml-rs is a XML parser has open issues around parsing including integer overflows / panics that may or may not be an issue with untrusted data.

    Together with these open issues with Unmaintained status xml-rs may or may not be suited to parse untrusted data.

    Alternatives

    See advisory page for additional details.

    security p: med 
    opened by github-actions[bot] 0
  • Detect if running under ARM translation

    Detect if running under ARM translation

    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.

    enhancement help wanted p: med 
    opened by sudo-carson 0
  • Tracking: Docs

    Tracking: Docs

    High Priority

    • [x] Installation
    • [ ] More examples for more parts of the API
    • [ ] Starter app walkthrough
    • [ ] CLI & bundler usage

    Medium Priority

    • [ ] Complete start-to-finish tutorial for a medium-sized project
    • [ ] Electron porting guide
    • [ ] Cover more advanced topics
      • [ ] Start-to-finish tutorial for a slightly larger project using more advanced features

    Low Priority

    • [ ] In-depth dive into Millennium internals
    documentation enhancement help wanted p: high 
    opened by sudo-carson 0
Releases(1.0.0-beta.3)
  • 1.0.0-beta.3(Jul 1, 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
    Source code(tar.gz)
    Source code(zip)
  • 1.0.0-beta.2(Apr 3, 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
    Source code(tar.gz)
    Source code(zip)
Owner
pyke
pyke
Simple macros to write colored and formatted text to a terminal. Based on `termcolor`, thus also cross-platform.

Bunt: simple macro-based terminal colors and styles bunt offers macros to easily print colored and formatted text to a terminal. It is just a convenie

Lukas Kalbertodt 202 Dec 22, 2022
Rust-based language and runtime for cross-platform app development

Pax Pax is a cross-platform rendering engine & Rust framework for interactive graphics, animations, and GUIs. Pax extends the Rust programming languag

Pax 75 Dec 19, 2022
Upkeep your websites and web applications with ease from the comfort of the command line.

Upkeep Upkeep your websites and web applications with ease from the comfort of the command line. Explore the docs ยป View Demo ยท Report Bug ยท Request F

Kevin B 0 Dec 24, 2021
Rust in Anger: high-performance web applications

Rust in Anger: Book demo This is the code repository that accompanies the Rust in Anger blog post. The following folders each come with their own buil

EqualTo 26 Apr 9, 2023
UniSBOM is a tool to build a software bill of materials on any platform with a unified data format.

UniSBOM is a tool to build a software bill of materials on any platform with a unified data format. Work in progress Support MacOS Uses system_profile

Simone Margaritelli 32 Nov 2, 2022
Benson, the light that warms all

benson Benson, the light that warms all Commands Command Info !benson status Checks benson bot status !benson join_vc id Joins a voice channel by ID

Residence 3 2 Nov 17, 2021
A ln scraper to read light novels and watch anime in your terminal (Written in rust)

Readme Table of content Why use kami Dependencies Install Linux/mac Windows Honorable mentions Why use kami Well its a fast and easy way to watch anim

mrfluffy 26 Dec 23, 2022
Proof-of-concept on how to solve Bitcoin's light node sync problem with zkSNARKs

BTC Warp Prove and verify the longest Bitcoin PoW chain BTC Warp is a proof-of-concept system that aims to solve the client-syncing problem for Bitcoi

Succinct 45 May 31, 2023
A dark and light Neovim theme written in fennel, inspired by IBM Carbon.

oxocarbon.nvim Note: The old rust version can be found on the rust branch of this repository Oxocarbon is looking for ports! If you're a user of anoth

Nyoom Engineering 690 Jun 29, 2023
Light and fast indexer for Ordinals.

ordi ordi is a fast light indexer for building ordinals data source. Usage export btc_data_dir= export ordi_data_dir= export btc_rpc_host= export btc

null 21 Oct 1, 2023
Light and fast indexer for Ordinals.

ordi ordi is a fast light indexer for building ordinals data source. Usage export btc_data_dir= export ordi_data_dir= export btc_rpc_host= export btc

null 22 Oct 7, 2023
A light-as-air client/server networking library for Rust

aeronet A light-as-air client/server networking library with first-class support for Bevy, providing a consistent API which can be implemented by diff

null 10 Nov 2, 2023
Cross-platform Rust library for coloring and formatting terminal output

Coloring terminal output Documentation term-painter is a cross-platform (i.e. also non-ANSI terminals) Rust library for coloring and formatting termin

Lukas Kalbertodt 75 Jul 28, 2022
Cross platform terminal library rust

Cross-platform Terminal Manipulation Library Crossterm is a pure-rust, terminal manipulation library that makes it possible to write cross-platform te

crossterm-rs 2.1k Jan 2, 2023
A cross platform minimalistic text user interface

titik Titik is a crossplatform TUI widget library with the goal of being able to interact intuitively on these widgets. It uses crossterm as the under

Jovansonlee Cesar 113 Dec 31, 2022
Alacritty - A fast, cross-platform, OpenGL terminal emulator

Alacritty is a modern terminal emulator that comes with sensible defaults, but allows for extensive configuration. By integrating with other applications, rather than reimplementing their functionality, it manages to provide a flexible set of features with high performance. The supported platforms currently consist of BSD, Linux, macOS and Windows.

Alacritty 43.8k Dec 31, 2022
A cross-platform graphical process/system monitor with a customizable interface and a multitude of features

A cross-platform graphical process/system monitor with a customizable interface and a multitude of features. Supports Linux, macOS, and Windows. Inspired by both gtop and gotop.

Clement Tsang 5.8k Jan 8, 2023
Cross-platform terminal screen clearing library

ClearScreen Cross-platform terminal screen clearing library. API documentation. Dual-licensed with Apache 2.0 and MIT. Uses Caretaker Maintainership.

null 23 Dec 30, 2022
Cross-platform terminal program to download IEEE journals

IEEE Journal Downloader A cross-platform terminal program which tries to download every article in a specified journal and merge the documents into on

Fong Chien Yoong 18 Jul 23, 2022