Hikkaba
ASP.NET Core imageboard
Install / Use
/learn @magicxor/HikkabaREADME
Hikkaba [pre-alpha]
Hikkaba is an imageboard written using ASP.NET Core and Entity Framework Core, designed with minimal JavaScript usage.
Features
Core Functionality
- [x] Multiple files per post: Supports attaching various file types:
- Audio
- Video
- Pictures
- Documents
- [x] SAGE support: Prevents thread bumping on reply
- [x] Search: Allows full-text searching through posts
- [x] Server-side paging: Efficiently handles navigation through category indexes (Sakura.AspNetCore.PagedList)
- [x] Thread-local user hashes: Option to display unique user identifiers (Blake3.NET)
- [x] Docker support: Ready for containerized deployment
- [ ] Thread archiving
- [ ] API for third-party integration
- [ ] Internationalization (multi-language support)
- [ ] User-created boards
- [ ] Virtual
/allcategory (shows threads from all non-hidden categories) - [ ] Tor and I2P network support
Content & Formatting
- [x] Thumbnail generation: Creates thumbnails for image and video files (ImageSharp)
- [x] BBCode markup: Supports common formatting tags (BBCodeParser):
[b],[i],[u],[s],[code],[sub],[sup],[spoiler],[quote]>>postId- Creates a link to another post within the same thread
- [x] URI detection: Automatically converts
http://,https://, andftp://links - [x] Timezone display: Shows post datetimes adjusted to the current user's timezone (Moment.js)
- [x] Post backlink display (shows replies to a post)
- [x] Country flag display (using GeoIP)
- [x] User agent icon display (e.g., browser type or OS type) (HttpUserAgentParser)
- [x] Audio metadata display (Audio Tools Library)
- [ ] Media gallery view
- [ ] Content embedding (YouTube, Vimeo, Coub, Twitter, Instagram, etc.)
- [ ] Detection of duplicate attachments within a thread
- [ ] Tripcodes
- [ ] Visual style/theme switching
- [ ] Post reactions (e.g., likes, dislikes, etc.)
- [ ] User post highlighting (on hash click)
- [ ] Long message truncation
- [ ] Automatic reply fetching
Storage
- [x] Multiple storage backends: Flexible file storage options (20|20 Storage):
- Local File System (default)
- Azure Blob Storage
- Amazon S3
- Google Cloud Storage
Moderation & Administration
- [x] Captcha: Protects against automated posting (DNTCaptcha.Core)
- [x] Administration panel
- [x] Per-category moderator assignments
- [x] Moderation functions
- [x] Ban system: Supports banning by IP address or range
- Board-wide or category-specific bans
- Options for post deletion upon banning: single post, all posts in the category, or all posts board-wide
- [x] Thread locking: Prevents further replies
- [x] Thread stickying: Pins threads to the top
- [ ] Identity lockout (Account security feature)
- [ ] Two-factor authentication (TOTP)
- [ ] Passcodes (user captcha bypass)
- [ ] Password-based post deletion
- [ ] Post reporting system
- [ ] DNSBL integration (spam prevention)
- [ ] Thread moving (between boards)
- [ ] Modlog (audit trail for staff actions)
- [ ] Wordfilter (regex support, configurable actions: replace, hide, deny)
Limits & Configuration
- [x] Custom attachment count limit per post
- [x] Maximum size per individual file attachment
- [x] Maximum total size of all attachments per post
- [x] Custom maximum number of threads per category
- [x] Allowed file extensions filter
- [x] Bump limit (per category and/or per thread)
- [x] Cycling thread mode (deletes old posts when limit is reached)
Observability
- [x] Dashboards (Grafana)
- [x] Metrics (OpenTelemetry, Prometheus)
- [x] Tracing (OpenTelemetry, Grafana Tempo)
- [x] Structured Logging (OpenTelemetry, Grafana Loki, NLog)
- [x] Health Checks
Testing
- [x] Unit tests (NUnit)
- [x] Integration tests (NUnit, Testcontainers)
Screenshots
Home page
<img width="874" alt="home" src="https://github.com/user-attachments/assets/0dd07e15-ae78-4705-821e-6ac6be2bf6e6" />Reply form
<img width="614" alt="reply form" src="https://github.com/user-attachments/assets/0272dca0-3296-4c39-bb24-00b9e4025020" />Board category
<img width="871" alt="category" src="https://github.com/user-attachments/assets/db35e1c5-4667-410d-b83a-17d2b8fb14d5" />Search
<img width="878" alt="search" src="https://github.com/user-attachments/assets/44781cfd-2198-43c3-b0bb-a0d1ee68432f" />Usage
Database migrations can be applied using the following command:
dotnet ef database update --project Hikkaba.Data --startup-project Hikkaba.Web --connection "Server=tcp:localhost,41443;Encrypt=False;Database=Hikkaba;User ID=SA;Password=YOUR_PASsWORD;Persist Security Info=False;TrustServerCertificate=True;MultiSubnetFailover=True"
Run the application using:
dotnet run --project Hikkaba.Web
Seed the database with test data using:
$headers=@{}
$headers.Add("content-type", "application/json")
$response = Invoke-WebRequest -Uri 'http://localhost:5000/api/v1/maintenance/seed?key=YOUR_KEY' -Method POST -Headers $headers
