A native Instagram client for Linux built with Rust and Slint UI.
This is an unofficial Instagram client. Use at your own risk. Instagram's Terms of Service may prohibit the use of unofficial clients. This project is for educational purposes.
- Authentication
- Instagram web login via embedded WebView
- Session import from browser cookies
- Secure credential storage in system keyring
- Automatic session restoration
- Feed
- View your home feed with infinite scroll
- Like posts (double-tap or button)
- View post captions, likes, and comments count
- Pull-to-refresh
- Stories
- View story thumbnails in feed header
- Story ring indicators
- Profiles
- View user profiles with bio, stats, and posts
- Profile picture display
- Posts grid with thumbnails
- Navigate to profiles from posts
- Edit your own profile (name, bio, website)
- Archive
- View your archived posts
- Tab-based navigation (Posts/Reels/Tagged/Archive)
- Post Viewer
- Full-screen post viewing
- Video playback with GStreamer (with audio)
- Video/carousel indicators
- Like, comment, share, save buttons
- Image Caching
- Automatic image caching to disk
- Progressive loading with placeholders
- UI
- Dark theme (Instagram-style)
- Responsive sidebar navigation
- Loading spinners and states
- Smooth 60fps UI updates
- Direct messages
- Comments viewing and posting
- Story viewing (full screen)
- Search users and hashtags
- Notifications
- Create posts
- Light theme option
- Language: Rust 2024 Edition
- UI Framework: Slint with Skia renderer
- HTTP Client: reqwest with cookie support
- Async Runtime: tokio
- Video Playback: GStreamer
- Credential Storage: System keyring via secret-service
- Rust (1.75 or later)
- Linux system with:
- X11 or Wayland
- D-Bus (for keyring support)
- OpenGL/Vulkan support (for Skia renderer)
- GStreamer (for video playback)
sudo apt install \
libssl-dev \
libdbus-1-dev \
libgtk-3-dev \
libwebkit2gtk-4.1-dev \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libavsudo dnf install \
openssl-devel \
dbus-devel \
gtk3-devel \
webkit2gtk4.1-devel \
gstreamer1-devel \
gstreamer1-plugins-base-devel \
gstreamer1-plugins-good \
gstreamer1-plugins-bad-free \
gstreamer1-plugins-ugly-free \
gstreamer1-libavsudo pacman -S \
openssl \
dbus \
gtk3 \
webkit2gtk-4.1 \
gstreamer \
gst-plugins-base \
gst-plugins-good \
gst-plugins-bad \
gst-plugins-ugly \
gst-libav# Clone the repository
git clone https://github.com/yourusername/instagram-linux.git
cd instagram-linux
# Build in release mode
cargo build --release
# Run
cargo run --release# Run with debug logging
RUST_LOG=debug cargo run
# Run with trace logging (very verbose)
RUST_LOG=trace cargo run
# Run tests
cargo test
# Format code
cargo fmt
# Lint
cargo clippyinstagram-linux/
├── src/
│ ├── main.rs # Application entry point
│ ├── api/ # Instagram API client (modular)
│ │ ├── mod.rs # API module exports
│ │ ├── types.rs # API data structures
│ │ ├── auth.rs # Authentication endpoints
│ │ ├── feed.rs # Feed fetching
│ │ ├── profile.rs # Profile endpoints
│ │ └── archive.rs # Archive endpoints
│ ├── app/ # Application logic (modular)
│ │ ├── mod.rs # App module exports
│ │ ├── types.rs # App data structures
│ │ ├── handlers.rs # UI callback handlers
│ │ ├── messages.rs # Message processing
│ │ ├── loaders.rs # Async data loaders
│ │ └── utils.rs # Utility functions
│ ├── auth.rs # Credential storage (keyring)
│ ├── config.rs # Application configuration
│ ├── image_cache.rs # Image caching system
│ ├── video.rs # GStreamer video player
│ └── webview_login.rs # WebView-based Instagram login
├── ui/
│ ├── app.slint # Main application window
│ ├── login.slint # Login page
│ ├── feed_page.slint # Home feed
│ ├── profile.slint # Profile page with tabs
│ ├── post.slint # Post card component
│ ├── post_viewer.slint # Full-screen post viewer
│ ├── sidebar.slint # Navigation sidebar
│ ├── stories.slint # Stories bar
│ ├── models.slint # Data model definitions
│ ├── theme.slint # Theme colors and styles
│ └── components.slint # Shared UI components
├── build.rs # Build script for Slint
├── Cargo.toml # Rust dependencies
└── README.md
- Credentials: Stored securely in system keyring
- Session:
~/.config/instagram-linux/session.json - Image Cache:
~/.cache/instagram-linux/images/
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.